sql server 错误处理机制
try 。。。catch
---Try Catch Syntax
BEGIN TRY
{<sql statements>}
end TRY
BEGIN Catch
{<sql> statements}
end catch [;]
MySQL 程序错误处理机制
** 定义条件 + 定义处理程序**
定义条件:
declare 错误名称 condition for {数值型错误码 | sqlstate ’字符串类错误代码‘}
错误码的说明:
MySQL_error_code 和 sqlstate_value 都可以表示MySQL的错误
MySQL_error_code : 是数值型错误代码
sqlstate_value :是长度为 5 的字符串类型错误代码。
案例
方式1
declare Filed_id_PRI condition for 1062
方式2
declare Filed_id_PRI condition for sqlstate ‘23000’
定义处理程序
可以为SQL执行过程中发生的某种类型的错误定义特殊的处理程序。定义处理程序时,使用declare语句的语法如下:
declare 处理方式 handler for 错误类型 处理语句;
处理方式: continue、 exit、undo
continue:表示遇到错误不处理,继续执行
exit:表示遇到错误,马上退出。 默认就这个
undo : 表示遇到错误后撤回之前的操作,mySQL 中目前不支持这样操作错误类型 (即条件)
SQLSTATE ‘字符串错误码’ :表示长度为 5 的 SQLstate_value 类型的错误代码
mysql_error_code :匹配数值类型的错误代码
错误名称 :表示 declare 错误名称 condition for 错误代码
SQLWarning :匹配所有以 01 开头的SQLSTATE错误代码
NOT FOUND :匹配所有以 02开头的SQLSTATE错误代码
sqlexception:匹配所有 没有被SQLWARINING或NOT FOUND捕获的SQLSTATE错误代码处理语句:
如果出现上述条件之一,则采用对应的处理方式,并执行指定的处理语句。语句可以是像
set 变量 = 值 这样的简单语句,
也可以是使用 begin 。。。。。 end 编写的复合语句案例
declare continue handler for {1062 | sqlstate ’23000‘ | Filed_id_PRI } set @val=’xxxx‘
案例
delimiter $
create procedure pro_1()
begin
declare continue handler for 1062 set @val='ares-wang';
set @x=0;
insert into test_1(id,name) values(1,'zen'),(2,'zen');
set @x=1;
end $
delimiter ;
call pro_1()
输出特点的错误信息
signal sqlstate ‘xxxx’ set message_text=‘xxxxxxxxxxxx’;