2014-01-13 2 views
0

В Oracle, я вызвав следующие querys (не из SQLPLUS) как часть сценария установки:Нужно ли мне COMMIT при перемежении DDL и DML?

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, (которые являются ауто- привержен). Я сомневаюсь, что мне нужно зафиксировать DML перед каждым DDL, или это безопасно сделать одну большую фиксацию в конце моего скрипта?

+0

По-прежнему более чистым является фиксация перед ddl, и это также делает назначение кода значительно более очевидным. Стоимость этой дополнительной фиксации небольшая. Как правило, это дополнительный кругооборот и даже этого можно избежать. – steve

ответ

5

См. Здесь.

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

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

Каждый оператор DDL будет совершать все предыдущие неподтвержденные заявления DML.

+0

Да, заявления DDL обычно выдает 2 фиксации: один до их запуска и один после завершения (если только они не ошибаются, и в этом случае они не выдают 2-го коммита). –

+0

Jeffrey вторая часть не совсем корректна, есть также ddl/dcl, которые не выполняют вторую фиксацию без сбоев. – steve