您的位置:首页 > 数据库 > Oracle

Oracle开发之触发器调用存储过程

2012-11-29 09:32 288 查看
转载原文地址:/article/8412039.html

大家都知道触发器是无需commit的,而且也不能写commit;触发器和触发它的DML是同一个事务

DML提交了,触发器的操作也提交了,所以无需Commit;否则就会造成错误信息。

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

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

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

create or replace trigger trigger_table1
after update or insert on  martin.table1
for each row
declare
PRAGMA AUTONOMOUS_TRANSACTION;--自制事务处理
begin
--调用拆分存储过程,触发器每次只拆分一条
mc_print(
:NEW.id,:NEW.name
);
commit;
end trigger_table1 ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: