如何为Oracle触发器>解决错误的绑定变量?

时间:2019-12-05 00:01:14

标签: oracle

创建下表并触发时,出现编译错误的绑定错误。

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”的错误绑定错误。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

正如@stickybit在评论中指出的,ERSubmitNo上没有cteam_ExpenseItem列。但是,即使有,您也不想尝试从定义了触发器的表中读取-您很可能会遇到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;

我正在猜测,这就是您要尝试执行的操作-如果没有,您可以根据需要折叠,纺锤或切割。 :-)