2013-02-12 85 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