转载自:https://blog.csdn.net/weixin_42364301/article/details/113441294
****
**1. 什么是处理程序**
处理程序可以预测程序执行过程中可能出现的问题,并给出相应的解决办法。
<br/>
**2. 定义处理程序的语法**
```sql
DECLARE handler_type HANDLER FOR condtion_value[,...] sp_statement
- handler_type:错误处理方式,有3个可选则
- CONTINUE:表示遇到错误不处理,继续执行
- EXIT:表示遇到错误马上退出
- UNDO:表示遇到错误后,撤销之前的所有操作,MysqL中,暂时不支持这样的操作
- sp_statement:遇到错误后需要执行的存储过程
- condition_value:错误类型,有6个可选值
- SQLSTATE sqlstate_value:包含5个字符的字符串错误值
- condition_name:自定义的错误条件名称
- sqlWARNING:匹配所有以01开头的sqlSTATE错误代码
- NOT FOUND:匹配所有以02开头的sqlSTATE错误代码
- sqlEXCEPTION:匹配所有没有被sqlWARNING或NOT FOUND捕获的sqlSTATE错误代码
- MysqL_error_code:匹配数值类型错误代码
```
<br/>
**3. 6种错误类型的处理程序**
```sql
# SQLSTATE value_
# 如果遇到value_值为42S02,则执行CONTINUE操作,并定义一个用户变量@info
DECLARE CONTINUE HANDLER FOR sqlSTATE '42S02' SET @info='NO_SUCH_TABLE';
# MysqL_error_code
# 如果遇到MysqL_error_code值为1146,则执行CONTINUE操作,并定义一个用户变量@info
DECLARE CONTINUE HANDLER FOR 1146 SET @info='NO_SUCH_TABLE';
# condition_name
# 先定义条件,然后再调用条件
# 这里先定义no_such_table条件,遇到1146错误,就执行CONTINUE操作
DECLARE no_such_table CONDITION FOR 1146;
DECLARE CONTINUE HANDLER FOR no_such_table SET @info='ERROR';
# sqlWARNING
# 捕获所有以01开头的错误代码,然后执行EXIT操作,并定义一个用户变量@info
DECLARE EXIT HANDLER FOR sqlWARNING SET @info='ERROR';
# NOT FOUND
# 捕获所有以02开头错误代码,然后执行EXIT操作,并定义一个用户变量@info
DECLARE EXIT HANDLER FOR NOT FOUND SET @info='NO_SUCH_TABLE';
# sqlEXCEPTION
# 捕获所有没有被sqlWARNING或NOT FOUND捕获的错误代码,然后执行EXIT操作,并定义一个用户变量@info
DECLARE EXIT HANDLER FOR sqlEXCEPTION SET @info='ERROR';
```
<br/>
**4. 演示**
```sql
mysql> delimiter $
mysql> create procedure handler()
-> begin
-> declare continue handler for sqlstate '23000' set @result='0';
-> -- id为1的键已存在,所以这里会报错
-> insert into account values(1, '赵六', 'zhaoliu');
-> set @result = '1';
-> insert into account values(4, '田七', 'tianqi');
-> set @result = '2';
-> end $
mysql> call handler() $
# 等于2,说明遇到错误了还是继续往下执行
mysql> select @result $
+---------+
| @result |
+---------+
| 2 |
+---------+
```
- MySQL
- MySQL是什么
- MySQL环境搭建
- centos7-MySQL8
- windows-MySQL8
- 数据库软件
- sqlyog软件安装
- navicat软件安装
- powerDesigner软件安装
- RDBMS术语
- SQL语句组成
- 数据库系统组成
- 数据库操作
- 数据表操作
- 查询语句
- 基本语法
- 子查询
- 表连接
- 查询语句执行顺序
- 事务
- 事务是什么
- 事务的作用
- 事务的4个特性
- 事务隔离级别
- 事务的实现
- 索引
- 索引的作用
- 索引操作
- 存储引擎
- 备份与恢复
- 视图
- 视图是什么
- 视图的作用
- 创建视图
- 查看视图
- 更改视图
- DML操作视图
- 删除视图
- 存储过程与函数
- 过程与函数是什么
- 存储过程操作
- 定义存储过程
- 调用存储过程
- 查看存储过程
- 删除存储过程
- 修改存储过程
- 函数操作
- 过程与函数区别
- 流程控制
- if语句
- case语句
- while循环语句
- repeat循环语句
- loop循环语句
- 变量
- 处理程序
- 光标
- Redis
- 简介
- 下载与安装
- 命令操作redis数据库
- 通用命令
- 数据操作
- 持久化
- Windows上的持久化操作
- 数据库设计
- 数据库设计过程
- ER模型图
- MongoDB
- MongoDB是什么?
- MongoDB特性
- MongoDB 数据模型
- 安装MongoDB
- MongoDB认证
- Database操作
- Collection操作
- Document操作
- 插入
- 查询
- 更新
- 删除
- buckWrite
- MongoDB索引
- 副本集
- 聚焦分析
- 事务管理
- 写关注
- 读关注