oracle存储过程编译以后要不要提交
在 Oracle 中,存储过程(Procedure)、函数(Function)、包(Package)等 编译后不需要手动提交。
原因如下:
一、DDL 与 PL/SQL 的提交规则
存储过程、函数、包等属于 DDL 对象
Oracle 会在创建或编译这些对象时 隐式提交(auto-commit)
无论你是在 SQL Developer 还是 SQL*Plus 执行:
CREATE OR REPLACE PROCEDURE my_proc AS
BEGIN
NULL;
END;
/
或者:
ALTER PROCEDURE my_proc COMPILE;
执行后都会立即生效,无需手动 COMMIT。
与 DML(数据操作)不同
INSERT、UPDATE、DELETE 需要手动 COMMIT 才保存
存储过程、建表、建序列、修改表结构等 DDL 对象 自动提交
二、SQL Developer 的行为
编译存储过程后:
状态栏显示:Compiled → 立即有效
无需额外提交
如果编译失败 → 必须修正语法或引用的对象,再重新编译
编译成功后可以直接调用存储过程执行
✅ 总结
对象类型 是否需要手动 COMMIT
存储过程 / 函数 / 包 / 触发器 ❌ 不需要,Oracle 自动提交
建表 / 建序列 / 修改表结构 ❌ 自动提交
插入/更新/删除数据 ✅ 需要手动 COMMIT
原因如下:
一、DDL 与 PL/SQL 的提交规则
存储过程、函数、包等属于 DDL 对象
Oracle 会在创建或编译这些对象时 隐式提交(auto-commit)
无论你是在 SQL Developer 还是 SQL*Plus 执行:
CREATE OR REPLACE PROCEDURE my_proc AS
BEGIN
NULL;
END;
/
或者:
ALTER PROCEDURE my_proc COMPILE;
执行后都会立即生效,无需手动 COMMIT。
与 DML(数据操作)不同
INSERT、UPDATE、DELETE 需要手动 COMMIT 才保存
存储过程、建表、建序列、修改表结构等 DDL 对象 自动提交
二、SQL Developer 的行为
编译存储过程后:
状态栏显示:Compiled → 立即有效
无需额外提交
如果编译失败 → 必须修正语法或引用的对象,再重新编译
编译成功后可以直接调用存储过程执行
✅ 总结
对象类型 是否需要手动 COMMIT
存储过程 / 函数 / 包 / 触发器 ❌ 不需要,Oracle 自动提交
建表 / 建序列 / 修改表结构 ❌ 自动提交
插入/更新/删除数据 ✅ 需要手动 COMMIT
浙公网安备 33010602011771号