我試圖創建一個只允許數據插入或更新的觸發器,如果這些值爲存檔的'A'
或打開的'O'
。每當我運行代碼時,我都會收到一條消息,說明觸發器編譯有錯誤,然後我看到PLS-00382: expression is of the wrong type error
。PLS-00382:表達式類型錯誤觸發器
我無法弄清楚什麼是錯的。在此之前,我使用||
運算符而不是OR
,並且觸發器編譯時沒有錯誤,但即使狀態設置爲'O'
或'A'
,表中的任何更新仍會引發異常。我意識到||
是不一樣的OR
(我一直在使用Ruby和困惑自己)。任何幫助將不勝感激。我正在使用Oracle SQL Developer 11g。
CREATE OR REPLACE TRIGGER before_status
BEFORE INSERT OR UPDATE OF status ON blog_post
FOR EACH ROW
BEGIN
IF :new.status != 'O' OR 'A' THEN
raise_application_error(-20101, 'Value must be A or O, cannot be anything else');
END IF;
END;
您需要用兩個比較('IF:new.status <> 'O' AND new.status <>「A'')或使用一組(如果' ('A','O')'中不是new.status)。現在寫的測試是'如果new.status!=('O'或'A')',('O'或'A')是一個布爾值(True或False),這是一個無效測試'new.status'。這是基本的SQL。 –
非常感謝你的幫助Ken。我不知道爲什麼我沒有注意到我只有一個比較。將代碼更改爲以下內容:IF:new.status!='O'OR:new.status!='A',觸發器已成功編譯。 – iamedgarv