在Update FM中 主鍵衝突

最近項目上發現 BAPI更新WBS的審批狀態時 DUMP,如下圖

DUMP 位置如下圖

 

在Insert 之前有一個Delete 會刪除數據。本着探索精神就做了個小程序進行測試

REPORT ztest_delete_insert.

TABLES z00_demo_001.
*
SELECT SINGLE *
  FROM z00_demo_001.
IF sy-subrc EQ 0.
  DELETE FROM z00_demo_001 WHERE uuid = z00_demo_001-uuid.
  z00_demo_001-aenam = 'ABCD'.
  INSERT z00_demo_001 FROM z00_demo_001.  " 可以正常插入,不會報主鍵重複
  COMMIT WORK.
ENDIF.

message i001(00) with '在 IN UPDATE TASK 前還沒有DUMP'.

CALL FUNCTION 'ZFM_TEST_DELETE_INSERT' IN UPDATE TASK. " FM中的代碼和 上邊 delete後insert的代碼一致

*bapi commit
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
  EXPORTING
    wait = abap_true.

運行結果如下圖所示:

基於測試得出結論如下

  • 在非Update進程中,先delete後insert相同主鍵的數據,不會dump,可以正常更新
  • 在update進程中,先delete後insert相同主鍵數據,會引發DBSQL_DUPLICATE_KEY_ERROR運行時錯誤。

                                

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章