然后,我们声明了一个名为cur的游标,用于从your_table表中获取数据。接着,我们使用DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;语句定义了一个处理程序,当游标遍历到结果集末尾时,将done变量的值设置为TRUE。 在read_loop循环中,我们使用FETCH语句将游标中的数据逐行取出,并赋值给v_data变量。然后,我...
在MySQL的存储过程中经常会看到这句话:DECLARE CONTINUE HANDLER FOR NOT FOUND。 它的含义是:若没有数据返回,程序继续,并将变量 IS_FOUND 设为 0 ,这种情况是出现在类似:select XX into XXX from tablename 的时候发生的。mysql游标循环的使用 CREATE PROCEDURE `test`.`new_procedure` () BEGIN -- 需要定义...
DECLARE EXIT HANDLER FOR SQLWARNING SET @info= 'ERROR'; //方法五:使用NOT FOUND DECLARE EXIT HANDLER FOR NOT FOUND SET @info = 'NO_SUCH_TABLE'; //方法六:使用SQLEXCEPTION DECLARE EXIT HANDLER FOR SQLEXCEPTION SET @info = 'ERROR'; 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13...
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET l_error=1; § 如果发生任何错误(不是 NOT FOUND), 执行 ROLLBACK和产生一条错误消息后退出当前块或存储过程。 DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; SELECT 'Error occurred – terminating'; END; § 如果 MySQL 1062错误 (重复的健值 )发生,...
BEGIN#声明局部变量DECLARE变量名1变量数据类型 [DEFAULT变量默认值];DECLARE变量名2,变量名3,... 变量数据类型 [DEFAULT变量默认值]; #为局部变量赋值SET变量名1=值;SELECT值INTO变量名2[FROM子句]; #查看局部变量的值SELECT变量1,变量2,变量3;END
DECLAREEXITHANDLERFORSQLWARNINGSET@info ='ERROR'; #方法5:使用NOT FOUND DECLAREEXITHANDLERFORNOTFOUNDSET@info ='NO_SUCH_TABLE'; #方法6:使用SQLEXCEPTION DECLAREEXITHANDLERFORSQLEXCEPTIONSET@info ='ERROR'; 4.案例解决 通过上面的介绍我们可以来解决前面出现的问题了,先删除之前的存储过程 ...
DECLAREtable_not_found CONDITIONfor1051;DECLAREEXITHANDLERFORtable_not_foundSELECT'Please create table abc first';SELECT*FROMabc; 这样代码的可读性比之前明显好多了。需要注意的是,要在存储过程声明一个命名条件的语句,则该语句必须出现在错误处理器或者游标声明的前面。
SQLWARNING SET @info = 'ERROR'; #方法5:使用NOT FOUND DECLARE EXIT HANDLER FOR NOT FOUND ...
NOT FOUND: 以'02'开头的 SQLSTATE 的别名。当我们使用 cursor 遍历数据时,如果遍历到表末尾,没有数据可供遍历时,SQLSTATE 就是 '02000',因此我们可以使用NOT FOUND来控制 handler 的行为。 DECLARECONTINUEHANDLERFORNOTFOUNDBEGIN-- body of handlerEND; ...
2、如果定义了handler action,会在continue或exit之前执行 发生错误的条件有: 1、MYSQL错误代码 2、ANSI-standard SQLSTATE code 3、命名条件。可使用系统内置的SQLEXCEPTION,SQLWARNING和NOT FOUND 作用域: 1、包括begin...end内的语句 DECLARE EXIT HANDLER FOR SQLWARNING,NOT FOUND,SQLEXCEPTION ...