[英]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.