-- source include/have_debug.inc SET sql_mode=ORACLE; --echo # --echo # Testing exceptions in the top-level blocks --echo # --echo # No HANDLER declarations, no exceptions DELIMITER /; CREATE FUNCTION f1 RETURN INT AS BEGIN RETURN 10; END; / DELIMITER ;/ SHOW FUNCTION CODE f1; SELECT f1(); DROP FUNCTION f1; --echo # No HANDLER declarations, no code, no exceptions DELIMITER /; CREATE PROCEDURE p1 () IS BEGIN END; / DELIMITER ;/ SHOW PROCEDURE CODE p1; CALL p1; DROP PROCEDURE p1; --echo # No HANDLER declarations, no code, some exceptions DELIMITER /; CREATE PROCEDURE p1 (v IN OUT INT) IS BEGIN EXCEPTION WHEN 1002 THEN v:=225; END; / DELIMITER ;/ SHOW PROCEDURE CODE p1; set @v= 10; CALL p1(@v); SELECT @v; DROP PROCEDURE p1; --echo # No HANDLER declarations, some code, some exceptions DELIMITER /; CREATE PROCEDURE p1 (v IN OUT INT) IS BEGIN v:=224; EXCEPTION WHEN 1002 THEN v:=225; END; / DELIMITER ;/ SHOW PROCEDURE CODE p1; set @v= 10; CALL p1(@v); SELECT @v; DROP PROCEDURE p1; --echo # Some HANDLER declarations, no code, no exceptions DELIMITER /; CREATE PROCEDURE p1 (v IN OUT INT) IS EXIT HANDLER FOR 1000 BEGIN v:=123; END; BEGIN END; / DELIMITER ;/ SHOW PROCEDURE CODE p1; set @v= 10; CALL p1(@v); SELECT @v; DROP PROCEDURE p1; --echo # Some HANDLER declarations, no code, some exceptions DELIMITER /; CREATE PROCEDURE p1 (v IN OUT INT) IS EXIT HANDLER FOR 1000 BEGIN v:=123; END; BEGIN EXCEPTION WHEN 1002 THEN v:=225; END; / DELIMITER ;/ SHOW PROCEDURE CODE p1; set @v= 10; CALL p1(@v); SELECT @v; DROP PROCEDURE p1; --echo # Some HANDLER declarations, some code, no exceptions DELIMITER /; CREATE PROCEDURE p1 (v IN OUT INT) IS EXIT HANDLER FOR 1000 BEGIN v:=123; END; BEGIN v:=223; END; / DELIMITER ;/ SHOW PROCEDURE CODE p1; set @v= 10; CALL p1(@v); SELECT @v; DROP PROCEDURE p1; --echo # Some HANDLER declarations, some code, some exceptions DELIMITER /; CREATE PROCEDURE p1 (v IN OUT VARCHAR2(20)) IS EXIT HANDLER FOR 1000 BEGIN v:=123; END; CONTINUE HANDLER FOR 1001 BEGIN SET v=223; END; BEGIN v:= 1; EXCEPTION WHEN 1002 THEN SET v=225; END; / DELIMITER ;/ SHOW PROCEDURE CODE p1; DROP PROCEDURE p1; --echo # --echo # Testing EXCEPTIONS in internal blocks --echo # --echo # No HANDLER declarations, no code, no exceptions DELIMITER /; CREATE PROCEDURE p1 (v IN OUT INT) IS BEGIN v:=123; BEGIN END; END; / DELIMITER ;/ SHOW PROCEDURE CODE p1; SET @v=10; CALL p1(@v); SELECT @v; DROP PROCEDURE p1; --echo # No HANDLER declarations, no code, some exceptions DELIMITER /; CREATE PROCEDURE p1 (v IN OUT INT) IS BEGIN v:=123; BEGIN EXCEPTION WHEN 20002 THEN v:=335; END; END; / DELIMITER ;/ SHOW PROCEDURE CODE p1; SET @v=10; CALL p1(@v); SELECT @v; DROP PROCEDURE p1; --echo # No HANDLER declarations, some code, no exceptions DELIMITER /; CREATE PROCEDURE p1 (v IN OUT INT) IS BEGIN v:=123; BEGIN v:=223; END; END; / DELIMITER ;/ SHOW PROCEDURE CODE p1; SET @v=10; CALL p1(@v); SELECT @v; DROP PROCEDURE p1; --echo # No HANDLER declarations, some code, some exceptions DELIMITER /; CREATE PROCEDURE p1 (v IN OUT INT) IS BEGIN v:=123; BEGIN v:=223; EXCEPTION WHEN 20002 THEN v:=335; END; END; / DELIMITER ;/ SHOW PROCEDURE CODE p1; SET @v=10; CALL p1(@v); SELECT @v; DROP PROCEDURE p1; --echo # Some HANDLER declarations, no code, no exceptions DELIMITER /; CREATE PROCEDURE p1 (v IN OUT INT) IS BEGIN v:=123; DECLARE EXIT HANDLER FOR 1000 BEGIN v:=323; END; BEGIN END; END; / DELIMITER ;/ SHOW PROCEDURE CODE p1; SET @v=10; CALL p1(@v); SELECT @v; DROP PROCEDURE p1; --echo # Some HANDLER declarations, no code, some exceptions DELIMITER /; CREATE PROCEDURE p1 (v IN OUT INT) IS BEGIN v:=123; DECLARE EXIT HANDLER FOR 1000 BEGIN v:=323; END; BEGIN EXCEPTION WHEN 20002 THEN v:=335; END; END; / DELIMITER ;/ SHOW PROCEDURE CODE p1; SET @v=10; CALL p1(@v); SELECT @v; DROP PROCEDURE p1; --echo # Some HANDLER declarations, some code, no exceptions DELIMITER /; CREATE PROCEDURE p1 (v IN OUT INT) IS BEGIN v:=123; DECLARE EXIT HANDLER FOR 1000 BEGIN v:=323; END; BEGIN v:= 324; END; END; / DELIMITER ;/ SHOW PROCEDURE CODE p1; SET @v=10; CALL p1(@v); SELECT @v; DROP PROCEDURE p1; --echo # Some HANDLER declarations, some code, some exceptions DELIMITER /; CREATE PROCEDURE p1 (v IN OUT INT) IS BEGIN v:=123; DECLARE EXIT HANDLER FOR 1000 BEGIN v:=323; END; BEGIN v:= 324; EXCEPTION WHEN 2002 THEN v:= 325; END; END; / DELIMITER ;/ SHOW PROCEDURE CODE p1; SET @v=10; CALL p1(@v); SELECT @v; DROP PROCEDURE p1;