2017-08-21 21 views
0

我希望在單個事務中想要刪除和插入,但如果沒有行刪除,那麼它應該引發和錯誤else插入(多重插入和刪除語句)。此語句刪除數據但不插入它。 我曾嘗試:刪除和插入不在oracle中的塊中工作

我已刪除了引發錯誤還那麼這是刪除,但不是插入的記錄,

如果我寫delete語句中向下則插入但不刪除。

如果沒有行被刪除,那麼我不得不提出一個塊的錯誤,否則它應該作爲給定的語句運行。這是它包含的示例,500(左右)在事務中插入或刪除腳本。

事務如果事務失敗,也應該拋出錯誤。

BEGIN 
    DBMS_OUTPUT.put_line (1); 

    BEGIN 
     DBMS_OUTPUT.put_line (1); 

     DELETE FROM CMC_BSDL_DETAILS 
      WHERE PDBC_PFX = 'CW6F'; 

     COMMIT; 

     IF SQL%ROWCOUNT = 0 
     THEN 
     RAISE_APPLICATION_ERROR (-20101, 'No 
    record deleted'); 
     END IF; 


     DELETE FROM CMC_BSTX_SUM_TEXT 
      WHERE PDBC_PFX = 'CW6F'; 

     COMMIT; 

     IF SQL%ROWCOUNT = 0 
     THEN 
     RAISE_APPLICATION_ERROR (-20101, 'No 
     record deleted'); 
     END IF; 


     INSERT INTO CMC_BSDL_DETAILS (PDBC_PFX, 
            BSDL_TYPE, 
            BSDL_NTWK_IND, 
            BSDL_EFF_DT, 
            BSDL_COPAY_AMT, 
            BSDL_DEDE_AMT, 
            BSDL_COIN_PCT, 
            BSDL_LTLT_AMT, 
            BSDL_TERM_DT, 
            BSDL_LT_TYPE, 
            BSDL_LT_PERIOD, 
            BSDL_LT_COUNTER, 
            BSDL_TIER, 
            BSDL_COV_IND, 
            BSDL_STOPLOSS_AMT, 
            BSDL_STOPLOSS_TYPE, 
            BSDL_BEG_MMDD, 
            BSDL_USER_LABEL1, 
            BSDL_USER_DATA1, 
            BSDL_USER_LABEL2, 
            BSDL_USER_DATA2, 
            BSDL_USER_LABEL3, 
            BSDL_USER_DATA3, 
            BSDL_USER_LABEL4, 
            BSDL_USER_DATA4, 
            BSDL_USER_LABEL5, 
            BSDL_USER_DATA5, 
            BSDL_USER_LABEL6, 
            BSDL_USER_DATA6, 
            BSDL_LOCK_TOKEN, 
            ATXR_SOURCE_ID, 
            SYS_LAST_UPD_DTM, 
            SYS_USUS_ID, 
            SYS_DBUSER_ID) 
      VALUES (
        'CW6F', 
        'AAMB', 
        'A', 
        TO_TIMESTAMP ('01/01/1990 
      00:00:00', 
            'MM/DD/YYYY 
      HH24:MI:SS.FF'), 
        250.00, 
        0.00, 
        0.00, 
        0.00, 
        TO_TIMESTAMP ('12/31/9999 
      00:00:00', 
            'MM/DD/YYYY HH24:MI:SS.FF'), 
        ' ', 
        ' ', 
        ' ', 
        0, 
        ' ', 
        0.00, 
        ' 
      ', 
        0, 
        ' ', 
        ' ', 
        ' ', 
        ' ', 
        ' ', 
        ' ', 
        ' ', 
        ' ', 
        ' ', 
        ' ', 
        ' ', 
        ' 
       ', 
        1, 
        TO_TIMESTAMP ('01/01/1753 00:00:00', 
            'MM/DD/YYYY 
     HH24:MI:SS.FF'), 
        TO_TIMESTAMP ('08/17/2017 16:15:10', 
            'MM/DD/YYYY 
       HH24:MI:SS.FF'), 
        'Translator', 
        'Translator'); 

     COMMIT; 
    END; 
EXCEPTION 
    WHEN OTHERS 
    THEN 
     ROLLBACK; 
END; 
+0

如果您顯示您嘗試過的實際命令將會非常有幫助 – Aemyl

+0

我已添加代碼,您能否檢查 – Ashu

+0

爲什麼您捕捉到所有使用'when others'的拋出異常?或者完全刪除它,或者至少在其中添加一個'raise'。 –

回答

1

之前,應進行檢查一個COMMIT聲明中,DELETE後即可。
只需推動COMMITIF ... END IF聲明後:

DELETE FROM CMC_BSDL_DETAILS 
     WHERE PDBC_PFX = 'CW6F'; 

    IF SQL%ROWCOUNT = 0 
    THEN 
    RAISE_APPLICATION_ERROR (-20101, 'No record deleted'); 
    END IF; 

    COMMIT; 

DELETE FROM CMC_BSTX_SUM_TEXT 
     WHERE PDBC_PFX = 'CW6F'; 

    IF SQL%ROWCOUNT = 0 
    THEN 
    RAISE_APPLICATION_ERROR (-20101, 'No 
    record deleted'); 
    END IF; 

    COMMIT; 

順便說一句 - 如果你想要做的所有這些聲明單個事務內,然後在這些語句之間不承諾。最後只運行一個COMMIT。每個提交語句結束一個事務,實際上在你的過程中有3個提交語句和3個事務,而不是一個。

相關問題