如果触发器中的语句不起作用 SQL(Oracle)

Posted

技术标签:

【中文标题】如果触发器中的语句不起作用 SQL(Oracle)【英文标题】:If statement inside Trigger not working SQL(Oracle) 【发布时间】:2016-06-04 20:06:00 【问题描述】:

我的目标是创建一个触发器来检查您尝试输入的号码 NR_RECIBO 是否在 Doc_cabecalho 表中,属性为 TIPO_DOC = 4

CREATE OR REPLACE TRIGGER ValidaRecibo
BEFORE INSERT ON Recibo
FOR EACH ROW
DECLARE val NUMBER;
BEGIN
    SELECT COUNT(*) INTO val 
    FROM Doc_cabecalho 
    WHERE (TIPO_DOC = 4 AND NR_DOCUMENTO = :NEW.NR_RECIBO);

    IF val = 0 
    THEN (-20502, ' Only from department 4 ');
    END IF;
END ValidaRecibo;

然而,这会引发以下错误:

PLS-00103:在预期以下情况之一时遇到符号“,”: * & = - + at in is mod 余数 not rem or != or ~= >= and or like like2 like4 likec as between ||成员子集

【问题讨论】:

【参考方案1】:

如果 val = 0 那么 raise_application_error(-20502, '仅限部门 6');

您应该在 DOC_TIPO 和 TIPO_DOC 之间做出选择;)

【讨论】:

哦,非常感谢你的朋友!我花了几个小时试图解决这个问题

以上是关于如果触发器中的语句不起作用 SQL(Oracle)的主要内容,如果未能解决你的问题,请参考以下文章

Oracle Forms:预删除触发器中的警报不起作用

基本 Oracle 触发器不起作用

在连接条件中使用时语句在 oracle 中不起作用的情况

日期计算在 Oracle SQL 案例语句中不起作用?

如何调整oracle中的sql语句输入的最大长度

Oracle SQL - 多级相关子查询不起作用