Welcome 微信登录

首页 / 数据库 / MySQL / ORA-04091和Compound Trigger(Oracle 11g)

Trigger常见有两种:行(Row Trigger)和语句(Statement Trigger)还有:Instead of Trigger和Event trigger。例子1-Row Trigger:CREATE OR REPLACE TRIGGER client AFTERINSERT ON tt1 FOR EACH rowBEGIN dbms_application_info.set_client_info(userenv("client_info")+1 );END;例子2-Statement TriggerCREATE OR REPLACE TRIGGER client_1 AFTERINSERT ON tt1BEGIN dbms_application_info.set_client_info(userenv("client_info")-1 );END;ORA-04091错误
Tom Kyte有一篇文章很好的解释了ORA-04091。http://www.oracle.com/technetwork/issue-archive/2008/08-sep/o58asktom-101055.html部分摘抄如下:Suppose wehave a table that includes country currency combinations with a primarycurrency. The following is sample data:
CountryCurrency  Primary_CurrencyUS      USD      YUS      USN      NUS      USS      NWe need toenforce the rule that at most one currency can be primary for a given country.We have a BEFORE UPDATE trigger on the above table for each row (usingautonomous transaction to avoid the mutating error) to check whether thecountry has any primary currency.That was allI needed to read. I knew they had a serious bug on their hands when Iread—paraphrasing:At most one currency can be primary (we have a constraint that crosses rows in the table).
We have a . . . trigger.
We are using an autonomous transaction to avoid the mutating table error.The trigger would have looked something like this: SQL< create or replace  2    trigger currencies_trigger  3    before update on currencies  4    for each row  5    declare  6      PRAGMA AUTONOMOUS_TRANSACTION;  7      l_cnt number;  8    begin  9        select count(*) 10          into l_cnt 11          from currencies 12        where primary_currency="Y" 13            and country = :new.country; 14        if ( l_cnt < 1 ) 15        then 16            raise_application_error 17            (-20000, "only one allowed"); 18        end if; 19    end; 20    /
  • 1
  • 2
  • 3
  • 下一页
Oracle EBS R12 for Linux安装MySQL使用Federate引擎实现操作本地表映射远程操作表相关资讯      ORA-04091 
  • Oracle中变异表(ORA-04091)处理方  (01/21/2014 14:01:40)
  • 关于ORA-04091异常的出现原因,以  (07/08/2013 14:04:40)
  • ORA-04091:触发器/函数不能读  (02/25/2013 08:28:13)
  • Oracle变异表触发器中ORA-04091错  (11/25/2013 10:26:56)
  • Oracle触发器给表自身的字段重新赋  (07/08/2013 13:57:10)
本文评论 查看全部评论 (0)
表情: 姓名: 字数