当我创建下面的表和触发器时,我得到了一个编译错误绑定错误。
CREATE TABLE cteam_ExpenseItem (
ExpenseNo NUMBER
);
CREATE TABLE cteam_ExpenseReport (
ERSubmitNo NUMBER
);
CREATE OR REPLACE TRIGGER cteam_Trigger3
BEFORE INSERT OR UPDATE OF ExpenseNo ON cteam_ExpenseItem
FOR EACH ROW
DECLARE
vA cteam_ExpenseItem.ExpenseNo%TYPE;
BEGIN
SELECT ExpenseNo
INTO vA
FROM cteam_ExpenseItem
WHERE ExpenseNo = :NEW.ERSubmitNo;
IF vA <= ERSubmitNo THEN
RAISE_APPLICATION_ERROR(-20000, 'Error');
END IF;
END;我收到“NEW.ERSUBMITNO”的绑定错误。我该如何着手解决这个问题?
发布于 2019-12-05 10:52:18
正如@stickybit在评论中指出的那样,cteam_ExpenseItem上没有ERSubmitNo专栏。但是,即使有,您也不希望尝试从定义触发器的表中读取-您很可能会得到一个TABLE IS MUTATING, TRIGGER CANNOT SEE IT错误。相反,请使用:OLD伪行中的值:
CREATE OR REPLACE TRIGGER cteam_Trigger3
BEFORE INSERT OR UPDATE OF ExpenseNo ON cteam_ExpenseItem
FOR EACH ROW
DECLARE
vA cteam_ExpenseItem.ExpenseNo%TYPE;
BEGIN
IF :OLD.ExpenseNo <= :NEW.ExpenseNo THEN
RAISE_APPLICATION_ERROR(-20000, 'Error');
END IF;
END;我猜这就是您想要做的--如果不是这样,您可以根据需要进行折叠、纺锤形或截断。:-)
https://stackoverflow.com/questions/59186317
复制相似问题