create procedure yichang () returning int; define var_num integer; let var_num = "jack"; --------存储过程到这将会出错 return var_num; end procedure;
异常处理
create procedure err_deal() define sql_err int; define isam_err int; define error_info char(100); on exception set sql_err, isam_err, error_info call error_rout(sql_err,isam_err,error_info); end exception; end procedure;
异常捕获:ON EXCEPTION
用ON EXCEPTION语句捕获一个或一组特定的异常(即错误),用错误号标识。 ON EXCEPTION 语句与RAISE EXCEPTION 语句一起提供存储过程语言(SPL)的错误 捕获和恢复机制。 在一个语句块内可以定义多个 ON EXCEPTION 语句。 被捕获的异常可以是系统异常或用户定义的异常。 一旦异常被捕获,错误状态即被清除。
ON EXCEPTION 语句的位置: ON EXCEPTION 语句是一声明性而非执行性语句, 故应位于任何执行语句之前, 而位于DEFINE 语句之后。
格式
ON EXCEPTION IN (错误号,...) SET SQL 错误变量 ISAM 错误文本变量 语句块 END EXCEPTION [WITH RESUME]
IN 子句说明欲捕获的错误号, 缺省时捕获所有的错误号。 SET 子句接收错误号和错误文本的变量,该语句可省略。 SQL 错误变量: 说明接收SQL 错误号的变量 ISAM错误变量: 说明接收ISAM错误号的变量 错误文本变量: 说明接收与SQL错误号对应的错误文本的变量 WITH RESUME 关键字用于把控制转向到捕获的错误被处理后的紧接发生异常语句后的语句,其效果相当于异常被处理后程序继续执行下去。 WITH RESUME 可以省略。
捕捉特定的错误
create procedure err_deal() define sql_err int; define isam_err int; define error_info char(100); on exception set sql_err, isam_err, error_info call error_rout(sql_err,isam_err,error_info); end exception; -----其他错误的捕捉 on exception (-206) call new_tab(); end exception; -----表不在数据库中的错误在这里捕捉 end procedure;
异常处理后继续执行
on exception (-206) call new_tab(); end exception with resume; select new froom tab; --出错将继续执行 let nex=9;