2015-12-08 84 views
0

是否可以在不調用回滾的情況下進行SIGNAL(即,是否存在不引起回滾的SQLSTATE),還是SIGNAL自動推斷回滾?是否可以在不調用回滾的情況下進行SIGNAL?在db2上?

我有一個查詢

CREATE TRIGGER DEAD_TRAILERS_NOTIFY 
AFTER UPDATE OF TRAILER ON TRIP 
REFERENCING NEW AS N OLD AS O 
FOR EACH ROW 
BEGIN ATOMIC 

DECLARE DEAD_SAT VARCHAR(10); 
DECLARE MSG VARCHAR(70); 

SET DEAD_SAT = COALESCE((SELECT TRAILER_ID FROM TRAILER WHERE LAST_SAT_DATE < CURRENT TIMESTAMP - 8 DAYS AND N.TRAILER = TRAILER_ID),'OK'); 



    IF DEAD_SAT <> 'OK' AND USER NOT IN ('VISTAR','TM4WIN') THEN 
    SET MSG = 'SAT ON TRAILER IS DEAD. PLEASE GET IT REPLACED'; 
    SIGNAL SQLSTATE '90001' SET MESSAGE_TEXT = MSG; 
    END IF; 
END 

唯一的問題是,如果它不能滿足它捲回數據觸發。有沒有這樣做的SQL狀態或全部都做?

回答

0

您需要使用表示警告而不是異常的SQLSTATE。

的兩個字符必須是01

對於用戶定義的警告,使用
01Hxx Valid warning SQLSTATEs returned by a user-defined function or external procedure CALL.

其中XX是你想要的內容。

+0

謝謝你的回答,但它仍在回滾數據。 – OVO

0

您需要將您的應用程序與數據庫的連接設置爲autocommit屬性爲false,並在應用程序中實現適當的錯誤處理。當你發現錯誤時,你可以決定是否要commit(如果SQLSTATE ='90001')或rollback(其他錯誤)。

但是,請記住,如果您的應用程序編寫爲永不發出明確的commit語句,則可能會創建其他併發或日誌記錄問題。

0

SIGNAL聲明本身不會導致回滾;它是處理信號的客戶端(調用者)。例如,如果你從Java程序中執行UPDATE,它將得到一個SQLException,由程序員來觀察SQLSTATE值並相應採取行動。

相關問題