首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >必须声明“‘RAISERROR”

必须声明“‘RAISERROR”
EN

Stack Overflow用户
提问于 2017-12-06 05:21:38
回答 1查看 555关注 0票数 0
代码语言:javascript
复制
CREATE TRIGGER x AFTER INSERT ON itemtype 
FOR EACH ROW
DECLARE 
    minn itemtype.PRICE%type;
BEGIN 
select MIN(itemtype.PRICE) into minn from itemtype;
IF (:new.PRICE > minn*4) then RAISERROR('Custom text');
END IF;
END;
/  

我正在尝试创建一个触发器,当我尝试将一个新条目插入到itemtype中,并且itemtype.PRICE列值大于表中当前低价商品的4倍时,该触发器会引发错误。

当我尝试创建触发器时,我得到了这些编译错误。

代码语言:javascript
复制
LINE/COL ERROR
-------- --------------------------------------------------------------
5/31     PL/SQL: Statement ignored
5/31     PLS-00201: identifier 'RAISERROR' must be declared

我也试过

代码语言:javascript
复制
    CREATE TRIGGER x AFTER INSERT ON itemtype 
    FOR EACH ROW
    DECLARE 
        minn itemtype.PRICE%type;
    BEGIN 
    select MIN(itemtype.PRICE) into minn from itemtype;
    if (:new.PRICE > minn*4) then raise_application_error(-20010,'Too Expensive');
    END IF;
    END;
    /

这是符合的,但是当我尝试向表中插入一个新条目时,我得到了这些错误,说明我的触发器失败了。

代码语言:javascript
复制
    SQL> insert into itemtype(ITEMNUM,NAME,PICTURE,PRICE,BELONGSTO ) VALUES ('A11','The who knows','',10.99,'P');
    insert into itemtype(ITEMNUM,NAME,PICTURE,PRICE,BELONGSTO ) VALUES ('A11','The who knows','',10.99,'P')
                *
    ERROR at line 1:
    ORA-04091: table USERNAME.ITEMTYPE is mutating, trigger/function may not see it
    ORA-06512: at "USERNAME.X", line 5
    ORA-04088: error during execution of trigger 'USERNAME.X'
EN

回答 1

Stack Overflow用户

发布于 2017-12-06 15:05:01

尝试在触发器中使用PRAGMA AUTONOMOUS_TRANSACTION。

看看我对这个问题的回答:SQL trigger on delete mutating table

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47662866

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档