当前位置:  数据库>oracle

ORA-04091和Compound Trigger(Oracle 11g)

    来源: 互联网  发布时间:2017-05-29

    本文导语: Trigger 常见有两种:行(Row Trigger)和语句(Statement Trigger) 还有:Instead of Trigger和Event trigger。 例子1-Row Trigger: CREATE OR REPLACE TRIGGER client AFTERINSERT ON tt1 FOR EACH row BEGIN  dbms_application_info.set_client_info(userenv('client_info')+1 ); END; 例子2-Statement...

Trigger

常见有两种:行(Row Trigger)和语句(Statement Trigger)

还有:Instead of Trigger和Event trigger。

例子1-Row Trigger:

CREATE OR REPLACE TRIGGER client AFTERINSERT ON tt1 FOR EACH row

BEGIN

 dbms_application_info.set_client_info(userenv('client_info')+1 );

END;

例子2-Statement Trigger

CREATE OR REPLACE TRIGGER client_1 AFTERINSERT ON tt1

BEGIN

 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_Currency

US      USD      Y

US      USN      N

US      USS      N

We 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    /


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Eclipse连接Oracle数据库的ORA-00604 ORA-12705错误
  • Oracle不能删除表 ORA-00604 ORA-01422 错误
  • oracle ORA-01114、ORA-27067错误解决方法
  • 如何配置 linux 下 oracle 的 listener .ora 和
  • oracle远程连接服务器出现 ORA-12170 TNS:连接超时 解决办法
  • [Oracle] 浅析令人抓狂的ORA-01555问题
  • 安装oracle出现error:ora-01031:insufficient privilleges的解决
  • plsql连接oracle数据库报ora 12154错误解决方法
  • 我在Linux7。3下面装了一个Oracle8i,但是现在启动不起来了,总是报错ORA-01031: insufficient privileges
  • 关于Oracle游标的问题(ORA-01000: maximum open cursors exceeded)
  • oracle 11g导出数据时报ORA 1455错误的处理方法
  • Oracle 数据库闪回功能设置出现ORA-19809和ORA-19804错误
  • ORA-28002 Oracle 11g存在密码过期问题解决方案
  • Linux 下数据库oracle出现ORA-27102错误的解决办法
  • ORACLE出现错误1033和错误ORA-00600的解决方法
  • Oracle ORA-22908(NULL表值的参考)异常分析与解决方法
  • PHP连接Oracle错误ORA-24324服务句柄未初始化的解决方法
  • oracle报错(ORA-00600)问题处理
  • Oracle 10g之ORA-32004问题
  • 出现ORA-01401和ORA-01008错误?
  • 如何得到带有ora的行的下一行
  • ORA-12514及ORA-28547错误解决方案
  • 浅析如何在tnsnames.ora中配置监听
  • Orcle的package中访问其它Schema的表报错ORA-00942解决方法
  • 解决报错ora-32035的方法分析
  • aq.executeQuery: ORA-00020: maximum number of processes (59) exceeded
  • ORA-00947:Not enough values (没有足够的值)的深入分析
  • solaris10 安装 ora9.2.0.1 时报错
  • 在UNIX下,我的ORA817该怎么样才可以自己启动呀?
  • 基于ORA-12170 TNS 连接超时解决办法详解
  • 谁能帮忙解释一下: ORA-01000 : maximun open cursors exceeded


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,