簡體   English   中英

存儲過程中的EXCEPTION處理不正確。

[英]EXCEPTION from stored procedure is not handling correctly.

SP EXCEPTION是否不刪除應刪除的數據?

PROCEDURE TEST (TEST   IN  TABLE1.COLUMN1%TYPE, TEST2 IN  TABLE2.COLUMN1%TYPE)
IS
SEQ1 NUMBER;
SEQ2 NUMBER;

BEGIN
    SELECT seq_id.NEXTVAL INTO SEQ1 FROM DUAL;     
    INSERT INTO TABLE1 VALUES(SEQ1, TEST);

    SELECT seq_id2.NEXTVAL INTO SEQ2 FROM DUAL;
    INSERT INTO TABLE2 VALUES(SEQ2, TEST2);        
    COMMIT;
EXCEPTION WHEN OTHERS THEN
    ROLLBACK;
    DELETE FROM TABLE1 WHERE COLUMN0 = SEQ1;
    DELETE FROM TABLE2 WHERE COLUMN0 = SEQ1;
    RAISE;
END;

如果發生異常,我想從那些包含特定ID的表中刪除所有內容。 這個SP被稱為X次,我有3個與一列有關系的表。 前兩個調用正常,如果第三個調用出錯,我也要刪除這些先前的插入。

TABLES
CALL TO SP  COLUMN1 - COLUMN2 - COLUMN3
1           1         2         3
2           1         2         3
3           1         2         ERROR

EXCEPTION
Delete from TABLES WHERE COLUMN2 = 2; 

看來,如果您將異常處理程序更改為包括

DELETE FROM TABLE1 WHERE COLUMN2 = TEST2;
DELETE FROM TABLE2 WHERE COLUMN2 = TEST2;

它會做您想要的。

但是,更好的解決方案可能是從過程中刪除COMMIT和ROLLBACK,並且僅在知道所有工作都已成功完成后才提交。 祝你好運。

ROLLBACK將已經撤消您的更改,您能解釋一下為什么要使用其他刪除語句嗎?

如果您的要求是回滾插入內容,以防萬一(= OTHERS)出現問題,這將起作用。 請記住,您的順序也會被重置!

PROCEDURE TEST (TEST   IN  TABLE1.COLUMN1%TYPE, TEST2 IN  TABLE2.COLUMN1%TYPE)
IS

BEGIN
  INSERT INTO TABLE1 VALUES(seq_id.NEXTVAL, TEST);
  INSERT INTO TABLE2 VALUES(seq_id2.NEXTVAL, TEST2);        
  COMMIT;
EXCEPTION WHEN OTHERS THEN
  ROLLBACK;
  RAISE;
END;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM