Skip to content

Broken EXCEPTION handling. [CORE1953] #2391

Open
@firebird-automations

Description

@firebird-automations

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\.