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