我对 PL/SQL 编程非常陌生。我尝试在代码中使用一些 DML 语句(插入)编写一个 pl/sql 过程。在 pl/sql 代码中执行插入操作后,我没有进行任何显式提交。但是在执行 pl/sql 过程后事务被提交。
这是默认行为吗?
我该如何控制这个?
我对 PL/SQL 编程非常陌生。我尝试在代码中使用一些 DML 语句(插入)编写一个 pl/sql 过程。在 pl/sql 代码中执行插入操作后,我没有进行任何显式提交。但是在执行 pl/sql 过程后事务被提交。
这是默认行为吗?
我该如何控制这个?
在 PL/SQL Developer 客户端中,您可以通过 Preferences 控制 SQL Window 事务的自动提交。
DML 语句 (INSERT/DELETE/UPDATE/MERGE) 在 PL/SQL 中不执行自动提交。DDL 语句确实提交(ALTER/CREATE 等),即使发生故障也会发生这种情况。如果您正在运行 EXECUTE IMMEDIATE(如运行 DDL 的动态语句),这也将提交您的事务。自2000 年以来一直如此 [并将继续]
SQL*Plus 之类的客户端接口具有可以关闭/打开的自动提交功能,请在客户端文档中查找。就像是
SET AUTOCOMMIT OFF
你可以看到这个变量的当前状态
SHOW AUTCOMMIT
这会告诉你它是否开/关。
通过这个了解更多的自动提交变体