2016-12-01 92 views
0

我下面運行完成在Oracle中創建觸發器查詢: -TRIGGER tU_DEDPARM_OEFix編譯警告:執行與警告

SQL>CREATE OR REPLACE TRIGGER tU_DEDPARM_OEFix 
    AFTER INSERT OR UPDATE ON DED_PARM FOR EACH ROW 
BEGIN  
    UPDATE DED_PARM SET 
    DED_PARM.OVRD_DED_AM = COALESCE(i.OVRD_DED_AM,0.00), 
    DED_PARM.OVRD_DED_PC = COALESCE(i.OVRD_DED_PC,0.00000)  
     FROM DED_PARM AS d INNER JOIN inserted AS i 
     ON (i.INTERNAL_EMPL_ID=d.INTERNAL_EMPL_ID AND 
      i.APPOINTMENT_ID=d.APPOINTMENT_ID AND 
      i.DEDTYP_CD=d.DEDTYP_CD AND 
      i.EFFECTIVE_DT=d.EFFECTIVE_DT) 
    END;/

查詢的執行後,我面臨着以下錯誤: -

TRIGGER tU_DEDPARM_OEFix編譯警告:執行完成時發出 警告。

然後我跑到下面的查詢看到編譯錯誤

SQL>觸發TU_DEDPARM_OEFIX顯示錯誤的錯誤;

下面是錯誤的: -

5/3 PL/SQL:ORA-00933:SQL命令不能正確地結束2/3
PL/SQL:SQL語句忽略10/4 PLS -00103:遇到 符號「結束文件」在需要下列之一時:

(開始的情況下宣告結束退出異常的轉到如果環模
空編譯提高收益選擇更新而與 < < 繼續關閉當前刪除獲取鎖芯打開回滾 保存點設置SQL執行提交FORALL合流管清洗

有人可以幫我準備正確的查詢。僅供參考 - 觸發器已創建,但創建時出現上面顯示的編譯錯誤。

謝謝!

回答

1

這在Oracle中是無效的更新語法。我不知道什麼inserted在MSSQL(:new:old)做的,但我認爲這是Oracle語句會觸發

CREATE OR REPLACE TRIGGER tU_DEDPARM_OEFix 
    AFTER INSERT OR UPDATE ON DED_PARM FOR EACH ROW 
BEGIN 
update DED_PARM d SET 
    OVRD_DED_AM = COALESCE(:new.OVRD_DED_AM,0), 
    OVRD_DED_PC = COALESCE(:new.OVRD_DED_PC,0) 
where INTERNAL_EMPL_ID = :new.INTERNAL_EMPL_ID and 
     APPOINTMENT_ID = :new.APPOINTMENT_ID and 
     DEDTYP_CD = :new.DEDTYP_CD and 
     EFFECTIVE_DT = :new.EFFECTIVE_DT; 
END; 
+0

謝謝回答。但是,如果我把分號(;)後DED_PARM.OVRD_DED_PC = COALESCE(:new.OVRD_DED_PC,0); (前FORM) 我面臨着以下錯誤: - 5/3 PLS-00103:出現符號「FROM」在需要下列之一時: (開始的情況下宣告結束退出異常的轉到如果環模 空pragma raise return select update with with <一個標識符> <<繼續關閉當前刪除讀取鎖定 插入打開回滾保存點集合sql執行提交所有 合併管道清除 –

+0

我猜,我不應該在FORM之前加上分號,否則在放置代碼後我仍然面臨同樣的錯誤。@ Kacper –