注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Oracle、MySQL资料及经验

.

 
 
 

日志

 
 

自治事务的触发器  

2014-08-19 12:40:34|  分类: sql与pl/sql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

正常情况下,Oracle规定在触发器中不能运行ddl语句和commit,rollback语句。
触发器无需commit,也不能写commit,触发器和触发它的DML是同一个事务。
DML提交了,触发器的操作也提交了,要不就一起回滚了。
当然,如果你一定要在触发器里写COMMIT,那就用自治事务,相当于一个事务里的子事务。

自治事务的触发器实例:
--就是declare里增加了pragma autonomous_transaction; 最后添加了commit

create or replace trigger tri_t
    before insert or update or delete on t
    for each row
declare
    v_scn number;
    pragma autonomous_transaction;
begin
    select current_scn into v_scn from v$database;

    insert into log_t
        (next_value, current_value, scn, create_time, old_val, new_val)
    values
        (seq_test.nextval, seq_test.currval, v_scn, sysdate, :old.empno, :new.empno);
    commit;
end;


该触发器建立后,无论对t表的dml操作成功与否,都会执行insert into log_t操作,非自治事务的触发器则在对t表的dml操作失败或回滚时,不会执行insert into log_t操作。

  评论这张
 
阅读(121)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018