oracle触发器调用存储过程2011

上传人:xiao****1972 文档编号:84085605 上传时间:2019-03-02 格式:DOC 页数:2 大小:28KB
返回 下载 相关 举报
oracle触发器调用存储过程2011_第1页
第1页 / 共2页
oracle触发器调用存储过程2011_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《oracle触发器调用存储过程2011》由会员分享,可在线阅读,更多相关《oracle触发器调用存储过程2011(2页珍藏版)》请在金锄头文库上搜索。

1、oracle触发器调用存储过程2011-10-01 21:57触发器传参数给存储过程,存储过程中有insert tableA where id=1.接着update tableA where id=1.由于insert语句不是自动提交,所以当insert语句没有commit的时候,update会报“表/视图发生了变化,程序不能读它”的错误,也就是id=1这一行被insert锁住了。此时,在触发器中调用自治事务,问题得以解决。 Oracle自治事务(Autonomous Transaction)将一个主事务分割成几个子事务,在执行完子事务以后再继续主事务。这里的关键是,子事务是独立于主事务的,子

2、事务中的Rollback和Commit操作只会影响子事务中的DML操作;同样,主事务中的Rollback和Commit操作只会影响事务中的DML操作,而不会影响子事务中的操作。在子事务中已经commit的操作,不会被主事务中的rollback撤销。 制定PL/SQL程序块为自治事务可以通过在程序开头使用如下命令实现 PRAGMA AUTONOMOUS_TRANSACTION 定义自治事务必须遵循以下规则: 如果要被定义为自治事务的程序是匿名的,则它必须是一个最外层的程序块。如果不是匿名的,则它必须是函数或者过程,或者是包含在一个中。在一个包中,只有其中的函数或过程能够定义成自治事务。整个包不能

3、申明为自治事务。一个对象的方法可以申明为自治事务触发器可以申明为自治事务内嵌程序块不能申明为自治事务注意:对于一个匿名的自治事务程序块来说,只有这个块的begin和end之间的代码被看作是自治事务。 触发器代码如下:create or replace trigger trigger_main2_update before update on t_busi_main_presend2 for each row declarepragma autonomous_transaction; -声明该触发器的事务为自治事务begin DBMS_OUTPUT.PUT_LINE(:new.SHSTATUS)

4、; if:new.SHSTATUS=1 and :old.SHSTATUS=0 then p_main2_mx(:new.id,:new.smscontent,:new.allcode,:new.phonetype,:new.sjtongdaoid,:new.cjr,:new.pretongdaoid,:new.clientid,:new.shr,:new.pretime,:new.cjsj,:new.shstatus,:new.kouchucnt,:new.dxlx,:new.allcount); -调用存储过程,并给存储过程传参数 :new.SENDSTATUS:=1 ; end if; commit; end; 运用AT(autonomous_transaction)时,有一些注意事项,简单列举如下:1. 在匿名PL/SQL块中,只有顶级的匿名PL/SQL块可以被设为AT2. 如果AT试图访问被MT控制的资源,可能有deadlock发生. 3. Package 不能被声明为AT,只有package所拥有的function和procedure 才能声明为AT4. AT程序必须以commit 或rollback结尾,否则会产生Oracle错误ORA-06519: active autonomous transaction detected and rolled back

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号