首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为oracle trigger>解决一个糟糕的绑定变量?

如何为oracle trigger>解决一个糟糕的绑定变量?
EN

Stack Overflow用户
提问于 2019-12-05 08:01:15
回答 1查看 34关注 0票数 0

当我创建下面的表和触发器时,我得到了一个编译错误绑定错误。

代码语言:javascript
复制
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”的绑定错误。我该如何着手解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2019-12-05 10:52:18

正如@stickybit在评论中指出的那样,cteam_ExpenseItem上没有ERSubmitNo专栏。但是,即使有,您也不希望尝试从定义触发器的表中读取-您很可能会得到一个TABLE IS MUTATING, TRIGGER CANNOT SEE IT错误。相反,请使用:OLD伪行中的值:

代码语言:javascript
复制
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;

我猜这就是您想要做的--如果不是这样,您可以根据需要进行折叠、纺锤形或截断。:-)

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

https://stackoverflow.com/questions/59186317

复制
相关文章

相似问题

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