2014-01-22 53 views
0

我有一個存儲過程,最後檢查錯誤,如果有錯誤,我執行回滾,然後將批處理表上的狀態更新爲'FAILED'。當我運行存儲過程時,我經常得到一個SQLCODE 818錯誤,說有'發生了時間戳衝突'。更新語句跟隨回滾時db2存儲過程錯誤

當我刪除更改批處理表狀態的更新語句時,我不會收到錯誤。

執行這些操作的最佳做​​法是什麼,以避免發生錯誤?

部分代碼如下所示:

IF v_error_count > 0 THEN           
    -- Batch failed  
    ROLLBACK;  

    UPDATE batch_table bt 
    SET bt.batch_status = 'FAILED' 
    WHERE batch_id = input_batch_id;   

END IF; 

感謝您的幫助。

+0

什麼是隔離級別使用?可能另一個進程正在同時進行修改。 – AngocA

回答

0

SQL Code -818表示DB2使用內部時間戳確保正在運行的模塊與預編譯SQL語句時創建的DBRM版本匹配。

您可能會與您的DBA(或您的站點上的其他人)檢查,因爲您必須執行的具體步驟可能會有所不同。有關總體概述,您可以在IBM知識中心上看到this article