sql server 错误处理机制
try 。。。catch
```sql
---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 的字符串类型错误代码。
![在这里插入图片描述](https://img-blog.csdnimg.cn/28e8676aa86245fa91e20449aae8a9c9.png)
**案例**
> # 方式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()
![在这里插入图片描述](https://img-blog.csdnimg.cn/aa81e3fbb42a45d086f398be7734b6b8.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/227fb7cac47b4ef286ed0c3569850087.png)