`

如何在oracle中使用DDL语句!

阅读更多

大家都知道触发器是无需commit的,而且也不能写commit;触发器和触发它的DML是同一个事务
DML
提交了,触发器的操作也提交了,所以无需Commit;否则就会造成错误信息。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

当然,如果你一定要在触发器里写COMMIT,那也是可以的,可以用Oracle中的自治事务来处理,自治事务就相当于一个事务里的子事务。

在正常情况下,Oracle规定在触发器中不能运行 DDL(Create/Alter/Drop)语句和Commit/Rollback语句的,因为DDL操作是隐性提交的,在触发器不允许有Commit,如在触发器中加入DDL语句,这种隐性提交就会导致错误信息;但有时特殊情况下需要在触发器中使用DDL语句,这时怎么办。

可以采取以下的解决办法:

1.在可以在触发器中加入:pragma autonomous_transaction;(DECLARE后面) 表示是自由事务处理。
如:

CREATE OR REPLACE TRIGGER T_create BEFORE insert ON T_Tax_INS_BD
for each row
DECLARE
pragma autonomous_transaction;

NRDSId varchar(500):='';

begin

通过以上方法即可解决触发器中不能有DDL语句的问题!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics