有人能帮我弄到这个触发器吗。
CREATE or replace trigger check_limit_to_Y
AFTER INSERT OR UPDATE ON api_user for each row
WHEN EXISTS (SELECT '1' FROM profile b WHERE NEW.mvno_limit!='Y' and b.mvno_id = NEW.mvno_id)
BEGIN
raise_application_error (-20999,'MVNO LIMIT MUST BE SET Y FOR ANY REAL MVNO_ID');
END;
我得到了错误
Error report -
ORA-00906: missing left parenthesis
00906. 00000 - "missing left parenthesis"
*Cause:
*Action:
1条答案
按热度按时间jjhzyzn01#
这来自Oracle站点:https://docs.oracle.com/cd/E11882_01/appdev.112/e25519/create_trigger.htm#LNPLS01374
WHEN (condition)
指定数据库为触发语句影响的每一行计算的SQL条件。如果受影响行的
condition
值为TRUE
,则为该行运行tps_body;否则,tps_body不会为该行运行。无论condition
的值如何,触发语句都会运行。condition
可以包含相关名(请参见referencing_clause ::=
)。在condition
中,不要在相关名NEW
、OLD
或PARENT
之前放置冒号(:
)(在此上下文中,它不是绑定变量的占位符)。有关SQL条件的信息,另请参阅:Oracle Database SQL Language Reference
对
WHEN (condition)
的限制BEFORE EACH ROW
AFTER EACH ROW
INSTEAD OF EACH ROW
您的代码似乎不满足最后两个限制(还有:WHEN关键字后面的整个条件必须用括号括起来)。
但是,您似乎需要使用“复合触发器语法”,因为您希望同时处理插入和更新。请仔细查看文档。
更新:尝试以下操作: