【问题标题】:Do I need to COMMIT when interleaving DDLs and DMLs?交错 DDL 和 DML 时是否需要 COMMIT?
【发布时间】:2014-02-01 01:23:23
【问题描述】:

在 Oracle 中,我正在调用以下查询(不是来自 sqlplus)作为安装脚本的一部分:

ALTER TABLE MYTABLE DISABLE CONSTRAINT PFTATTRS_ATTR_FK;
INSERT INTO MYTABLE (PTF_ID, ATTR_ID) VALUES (1, 5);
ALTER TABLE MYTABLE ENABLE CONSTRAINT PFTATTRS_ATTR_FK;

如您所见,我将 DML(需要 COMMIT)与 DDL(自动提交)交错。 我的疑问是:我是否需要在每个 DDL 之前提交 DML,或者在我的脚本末尾进行一次大提交是否安全?

【问题讨论】:

  • 在 ddl 之前提交仍然更干净,它也使代码的意图更加明显。额外提交的成本很小。通常需要额外的往返,甚至可以避免。

标签: oracle transactions commit ddl dml


【解决方案1】:

看这里。

http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:7072180788422

https://community.oracle.com/message/10310617

每个 DDL 语句都会提交所有之前未提交的 DML 语句。

【讨论】:

  • 是的,DDL 语句通常会发出 2 次提交:一次在开始之前,一次在完成后(除非它们出错,在这种情况下它们不会发出第二次提交)。
  • Jeffrey 第二部分并不完全正确,也有 ddl/dcl 不做第二次提交而不失败。
猜你喜欢
  • 2011-02-04
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
相关资源
最近更新 更多