2017-10-13 121 views
1

我试图创建我的触发器,但它要求绑定每次。当我在出现的窗口上单击应用时,它会以我想要的方式工作...但是,它会记录错误...Oracle PL/SQL触发器请求绑定

我的触发器检查客户端是否处于活动状态,并且不允许的变化,如果它被发现是积极的......

CREATE Trigger Client_Activity 
BEFORE Insert or Update or Delete ON Client 
FOR EACH ROW 
DECLARE 
    VAR_AC char(2); 
BEGIN 
    IF UPDATING THEN 
     SELECT Activity INTO VAR_AC 
     FROM Client_Additionals 
     WHERE Activity = :Old.Activity; 

     IF Activity = 'AC' 
      THEN Raise_Application_Error(-20999, 'active') 
     END IF; 
END; 
/

Oracle版本12使用的SQLDeveloper

+0

认沽'SET DEFONE OFF;''之前CREATE TRIGGER ....'语句,然后按F5'运行script' – krokodilko

+0

@a_horse_with_no_name - 与代码绑定变量时的情况相同。不同的前端做不同。 SQL \ * Plus只会说*绑定变量“OLD”未声明*。 SQL Developer将打开一个标有“Enter binds”的弹出窗口,等待“Old”的值。我相信Toad会做类似于SQL Developer的事情。 – mathguy

+0

@krokodilko - 我认为这不会解决问题......为什么呢?这个问题是一个(意外的,或者说是错误的)绑定变量,而不是一个替代变量。 – mathguy

回答

0

您的触发可使用两种语法错误:

  1. IF缺少的END IF
  2. 您需要的可变var_ac
  3. 内容比较你缺少一个;Raise_Application_Error()

后把它们一起,你可以毫无问题创建触发器。

但是,您需要使用SQL Developer中的“运行脚本”按钮来运行这样的PL/SQL块。

enter image description here

的SQL * Plus不需要特殊处理:

enter image description here