Open
Description
Submitted by: prenosil (prenosil)
Relate to CORE1956
Votes: 3
User defined EXCEPTION caught by WHEN handler does not undo previous actions.
Example script:
CREATE EXCEPTION EX 'Test';
CREATE TABLE TEST(A INTEGER);
INSERT INTO TEST(A) VALUES(1000);
COMMIT;
SELECT * FROM TEST;
A
1000
EXECUTE BLOCK AS
BEGIN
UPDATE TEST SET A=A+10;
EXCEPTION EX;
END;
Error: Test
SELECT * FROM TEST;
A
1000 \.\.\. o\.k\., the Update was undone
EXECUTE BLOCK AS
BEGIN
UPDATE TEST SET A=A+10;
EXCEPTION EX;
WHEN ANY DO BEGIN END
END;
SELECT * FROM TEST;
A
1010 \.\.\. wrong \!\!\!\!\!
EXECUTE BLOCK AS
BEGIN
UPDATE TEST SET A=A+10;
EXCEPTION EX;
WHEN EXCEPTION EX DO BEGIN END
END;
SELECT * FROM TEST;
A
1020 \.\.\. wrong \!\!\!\!\!
EXECUTE BLOCK AS
DECLARE VARIABLE I INTEGER;
BEGIN
UPDATE TEST SET A=A+10;
I = 1 / 0;
WHEN ANY DO BEGIN END
END;
SELECT * FROM TEST;
A
1020 \.\.\. other kinds of exceptions work o\.k\.