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

posted on 2025-10-09 16:20  lydstory  阅读(27)  评论(0)    收藏  举报

导航