2013-02-12 58 views
0

我试图创建一个触发器,如果​​Prog_Type = 'EPISODE'会触发。我收到一个坏的绑定错误 - PLS - 000049.我相信有什么毛病我DECLARE状态SQL触发器坏绑定错误

CREATE OR REPLACE TRIGGER Seas_Pk_Trigger 
BEFORE INSERT OR UPDATE OF Seas_ID ON Season_Table 
FOR EACH ROW 
DECLARE 
Prog_Type VARCHAR2(7); 
BEGIN 
IF (:OLD.Prog_Type <> 'EPISODE') 
THEN SELECT Seas_ID_Seq.nextval into :new.Seas_ID from dual; 
END IF; 
END Seas_Pk_Trigger; 
/

回答

0

如果您要引用您的表中的列,你不需要申报列Prog_Type参考它与:OLD:NEW伪记录。如果Prog_Type是表中(我假设它是),那么就忽略声明:

CREATE OR REPLACE TRIGGER Seas_Pk_Trigger 
BEFORE INSERT OR UPDATE OF Seas_ID ON Season_Table 
FOR EACH ROW 
BEGIN 
IF (:OLD.Prog_Type <> 'EPISODE') 
THEN SELECT Seas_ID_Seq.nextval into :new.Seas_ID from dual; 
END IF; 
END Seas_Pk_Trigger; 
/

我不知道如何解释你的说法,你只希望这火的时候,Prog_Type = 'EPISODE'为你触发了一个<>到EPISODE子句?

+0

嗨,我已经改变了代码,你推荐没有declare语句,但我仍然收到相同的绑定错误。它是IF(:OLD.Prog_Type <>'EPISODE')的错误吗? 'CREATE OR REPLACE TRIGGER Seas_Pk_Trigger''在插入或更新Seas_ID之前插入Season_Table'对于每一行''BEGIN'' IF(:OLD.Prog_Type <>'EPISODE')''然后选择Seas_ID_Seq.nextval到:new.Seas_ID from dual;''END IF;''END Seas_Pk_Trigger;''/' – Rob1991 2013-02-13 13:02:28

+0

我试着创建你的表,序列和触发器完全如图所示,但我没有问题,坏的绑定,并且触发器编译得很好。你确定这个坏对象适用于这个对象吗?你的脚本中是否有其他的DDL语句?你在用什么IDE?或者你在使用SQL Plus吗? – Wolf 2013-02-13 16:20:17

+0

嗨,我正在使用Oracle 11g。我放弃了所有的约束和表格并重建它。我建立了表格,然后是约束条件,然后是上面描述的这一个触发器。然而,我在'((:OLF.Prog_Type)''上收到这个错误的绑定变量错误00049。如上所述'Prog_Type'列在'Program_Table'而不是'Season_Table'中,所以它不能绑定变量的原因是因为它找不到变量,即我需要引用'Program_Table'? – Rob1991 2013-02-13 17:39:22