我創建了一個觸發與下面的代碼發現SQL異常。錯誤是:ORA-04098:觸發器是無效的,失敗再驗證
create or replace trigger DTE_SAVE_ORIGINAL_VAL
after update
on attrvaldesc
FOR Each row
when (new.field2 is null)
Declare
attrvaloriginal attrval.attrval_id%TYPE;
attrval_id attrval.attrval_id%TYPE;
language_id attrvaldesc.language_id%type;
storeent_id attrval.storeent_id%type;
PRAGMA AUTONOMOUS_TRANSACTION;
Begin
Dbms_Output.Put_Line(:OLD.attrval_id);
select attrval_id into attrvaloriginal from attrval where identifier = (select identifier||'_original' from attrval where attrval_id= :OLD.attrval_id and storeent_id=10051) and storeent_id=10051;
if (attrvaloriginal > 0) then
Dbms_Output.Put_Line(attrvaloriginal);
Dbms_Output.Put_Line(:NEW.value);
delete from attrval where attrval_id = attrvaloriginal and storeent_id=10051;
commit;
END IF;
End;
觸發已編譯的,當我觸發一個作業,用於更新attrvaldesc表,我「M面向下方例外
異常消息:
甲SQL異常被捕獲。錯誤是:ORA-04098:觸發器 'WCS_ADMIN_HFI.DTE_SAVE_ORIGINAL_VAL' 是無效的,失敗再驗證
堆棧跟蹤:
com.ibm.commerce.foundation.dataload.exception.DataLoadSQLException:SQL異常被抓住了。錯誤是:ORA-04098:觸發器「WCS_ADMIN_HFI.DTE_SAVE_ORIGINAL_VAL」是無效的,失敗再驗證
要檢查,如果在我的觸發任何錯誤,我做了一個
SHOW ERRORS TRIGGER DTE_SAVE_ORIGINAL_VAL;
我回到下面
18/1 PLS-00103:出現符號 「DROP」
你的觸發器沒有'drop' - 你確定你有正確的版本加載嗎?啊,它也沒有18行,所以你創建它作爲一個更大的腳本的一部分,只是省略'/'執行'create trigger'?你需要這個,因爲它是PL/SQL。 –
是的,我沒有添加/在最後。讓我試試 – Shiva
現在它的工作。謝謝Alex! – Shiva