BEGIN -- outer blockDECLARE EXIT HANDLER FOR ...; -- handler H1DECLARE EXIT HANDLER FOR ...; -- handler H2stmt1;stmt2;END;
BEGIN -- outer blockBEGIN -- inner blockDECLARE EXIT HANDLER FOR ...; -- handler H1stmt1;END;stmt2;END;
CREATE PROCEDURE p1()BEGINDECLARE CONTINUE HANDLER FOR SQLSTATE '42S02'SELECT 'SQLSTATE handler was activated' AS msg;DECLARE CONTINUE HANDLER FOR SQLEXCEPTIONSELECT 'SQLEXCEPTION handler was activated' AS msg;DROP TABLE test.t;END;
mysql> CALL p1();+--------------------------------+| msg |+--------------------------------+| SQLSTATE handler was activated |+--------------------------------+
CREATE PROCEDURE p2()BEGIN -- outer blockDECLARE CONTINUE HANDLER FOR SQLSTATE '42S02'SELECT 'SQLSTATE handler was activated' AS msg;BEGIN -- inner blockDECLARE CONTINUE HANDLER FOR SQLEXCEPTIONSELECT 'SQLEXCEPTION handler was activated' AS msg;DROP TABLE test.t; -- occurs within inner blockEND;END;
mysql> CALL p2();+------------------------------------+| msg |+------------------------------------+| SQLEXCEPTION handler was activated |+------------------------------------+
CREATE PROCEDURE p3()BEGIN -- outer blockDECLARE CONTINUE HANDLER FOR SQLEXCEPTIONSELECT 'SQLEXCEPTION handler was activated' AS msg;BEGIN -- inner blockDECLARE CONTINUE HANDLER FOR SQLSTATE '42S02'SELECT 'SQLSTATE handler was activated' AS msg;END;DROP TABLE test.t; -- occurs within outer blockEND;
mysql> CALL p3();+------------------------------------+| msg |+------------------------------------+| SQLEXCEPTION handler was activated |+------------------------------------+
CREATE PROCEDURE p4()BEGIN -- outer blockBEGIN -- inner blockDECLARE CONTINUE HANDLER FOR SQLEXCEPTIONSELECT 'SQLEXCEPTION handler was activated' AS msg;DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02'SELECT 'SQLSTATE handler was activated' AS msg;END;DROP TABLE test.t; -- occurs within outer blockEND;
mysql> CALL p4();ERROR 1051 (42S02): Unknown table 'test.t'
文章转载自数据库杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




