MySQL 存储过程的异常处理
mysql>
mysql> delimiter $$
mysql>
mysql>
CREATE
PROCEDURE
myProc
-> (p_first_name
VARCHAR
(30),
-> p_last_name
VARCHAR
(30),
-> p_city
VARCHAR
(30),
-> p_description
VARCHAR
(30),
->
OUT
p_sqlcode
INT
,
->
OUT
p_status_message
VARCHAR
(100))
->
BEGIN
->
->
/* START Declare Conditions */
->
->
DECLARE
duplicate_key CONDITION
FOR
1062;
->
DECLARE
foreign_key_violated CONDITION
FOR
1216;
->
->
/* END Declare Conditions */
->
->
/* START Declare variables and cursors */
->
->
DECLARE
l_manager_id
INT
;
->
->
DECLARE
csr_mgr_id
CURSOR
FOR
->
SELECT
id
->
FROM
employee
->
WHERE
first_name=p_first_name
->
AND
last_name=p_last_name;
->
->
/* END Declare variables and cursors */
->
->
/* START Declare Exception Handlers */
->
->
DECLARE
CONTINUE
HANDLER
FOR
duplicate_key
->
BEGIN
->
SET
p_sqlcode=1052;
->
SET
p_status_message=
'Duplicate key error'
;
->
END
;
->
->
DECLARE
CONTINUE
HANDLER
FOR
foreign_key_violated
->
BEGIN
->
SET
p_sqlcode=1216;
->
SET
p_status_message=
'Foreign key violated'
;
->
END
;
->
->
DECLARE
CONTINUE
HANDLER
FOR
not
FOUND
->
BEGIN
->
SET
p_sqlcode=1329;
->
SET
p_status_message=
'No record found'
;
->
END
;
->
->
/* END Declare Exception Handlers */
->
->
/* START Execution */
->
->
SET
p_sqlcode=0;
->
OPEN
csr_mgr_id;
->
FETCH
csr_mgr_id
INTO
l_manager_id;
->
-> IF p_sqlcode<>0
THEN
/* Failed to get manager id*/
->
SET
p_status_message=CONCAT(p_status_message,
' when fetching manager id'
);
->
ELSE
->
INSERT
INTO
employee (first_name,id,city)
->
VALUES
(p_first_name,l_manager_id,p_city);
->
-> IF p_sqlcode<>0
THEN
/* Failed to insert new department */
->
SET
p_status_message=CONCAT(p_status_message,
->
' when inserting new department'
);
->
END
IF;
->
END
IF;
->
->
CLOSE
csr_mgr_id;
->
->
/* END Execution */
->
->
END
$$
Query OK, 0
rows
affected (0.02 sec)
mysql>
mysql> delimiter ;
mysql>
set
@myCode = 0;
Query OK, 0
rows
affected (0.00 sec)
mysql>
set
@myMessage = 0;
Query OK, 0
rows
affected (0.00 sec)
mysql>
mysql> call myProc(
'Jason'
,
'Martin'
,
'New City'
,
'New Description'
,@myCode,@myMessage);
Query OK, 1 row affected (0.00 sec)
mysql>
mysql>
select
@myCode, @myMessage;
+
---------+------------+
| @myCode | @myMessage |
+
---------+------------+
| 0 |
NULL
|
+
---------+------------+
1 row
in
set
(0.00 sec)
mysql>
mysql>
drop
procedure
myProc;
Query OK, 0
rows
affected (0.00 sec)
MySQL 存储过程的异常处理的更多相关文章
- mysql存储过程之异常处理篇
mysql存储过程也提供了对异常处理的功能:通过定义HANDLER来完成异常声明的实现 语法如下: DECLARE handler_type HANDLER FOR condition_value[, ...
- 详解MySQL存储过程的“异常处理”
阅读目录:存储过程的异常处理 定义异常处理 单一异常处理程序 continue exit 多个异常处理程序 关于错误编号和SQLSTATE码 使用3个处理程序 忽略某一异常的处理 异常处理的命名 异常 ...
- MySQL存储过程的异常处理
阅读目录:存储过程的异常处理 定义异常处理 单一异常处理程序 continue exit 多个异常处理程序 关于错误编号和SQLSTATE码 使用3个处理程序 忽略某一异常的处理 异常处理的命名 异常 ...
- MySQL存储过程学习笔记
MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣.MySQL 5.0终于开始支持存储过程了. MySQL的关键字大小写通用.该学习笔记对关键字使用大写:变量名,表名使用小写. ...
- MYSQL 存储过程 多表更新异常捕捉和异常处理方式
今天在做MYSQL 存储过程 多表更新的功能 多表更新时候注意事项 1.首先是确保多表更新能够一次执行,途中没有哪个表的sql语句错误 2.上线后修改表结构及字段,请注意检查是否影响mysql 过 ...
- MySQL存储过程(转)
一.MySQL 创建存储过程 "pr_add" 是个简单的 MySQL 存储过程,这个存储过程有两个 int 类型的输入参数 "a"."b" ...
- MySql存储过程
MySQL 存储过程 ```sql CREATE PROCEDURE myprocedure (IN para01 INTEGER) BEGIN DECLARE var01 CHAR(10); IF ...
- mysql存储过程之游标遍历数据表
原文:mysql存储过程之游标遍历数据表 今天写一个mysql存储过程,根据自己的需求要遍历一个数据表,因为对存储过程用的不多,语法不甚熟悉,加之存储过程没有调试环境,花了不少时间才慢慢弄好,故留个痕 ...
- MySQL 存储过程 经常使用语法
MySQL 存储过程是从 MySQL 5.0 開始添加的新功能.存储过程的长处有一箩筐.只是最基本的还是运行效率和SQL 代码封装.特别是 SQL 代码封装功能,假设没有存储过程,在外部程序訪问数据库 ...
随机推荐
- LuoguP3621 [APIO2007]风铃
https://zybuluo.com/ysner/note/1140124 题面 题面复杂,戳我 解析 看着这道题... 似乎与[HNOI/AHOI2018]道路有不可言妙的相似之处. (题面吓人, ...
- SQLServer 使用变量动态行转列
drop table #testcreate table #test( id int identity(1,1) primary key, bizDate varchar(50), ...
- Beta冲刺-星期五
这个作业属于哪个课程 <课程的链接> 这个作业要求在哪里 <作业要求的链接> 团队名称 Three cobblers 这个作业的目标 完成项目最后的冲刺 ...
- Android Unresolved Dependencies
在Android Studio的开发中,在软件中集成了ButterKnife插件,另外需要集成ButterKnife的jar包.因为本地没有现成的,所以在module的build.gradle文件中添 ...
- Android Retrofit 2.0文件上传
Android Retrofit 实现(图文上传)文字(参数)和多张图片一起上传 使用Retrofit进行文件上传,肯定离不开Part & PartMap. public interface ...
- 金立 M6 (GN8003) 解锁 BootLoader 进入第三方 recovery 刷机 ROOT
首先下载好工具:http://url.cn/5EILbQn 备用连接 :http://pan.baidu.com/s/1c28j7k0 本篇教程教你如何傻瓜式解锁BootLoader并刷入recove ...
- 【SQL】含有NULL值的排序
查询结果中有NULL值,当进行升序排序时,NULL值默认为“最大值”,排在最后面.要想改变NULL值的显示顺序,只需要在SQL语句后面加上NULLS FIRST(排在前面),NULLS LAST(排在 ...
- PythonOpenCV:MLP用于最近邻搜索
一:简单C++版本的链接: http://blog.csdn.net/kaka20080622/article/details/9039749 OpenCV的ml模块实现了人工神经网络(Artific ...
- Vs2010删除空白行
在copy了别人的代码之后,出现了大量的空白行,批量删除空白行方法为: 查找内容:^:b*$\n 替换为: 查找范围:当前文档 使用:正则表达式
- C++对象的内存模型
1. 普通对象模型 对象是如何在内存中布局的? 成员 存放位置 访问范围 非静态数据成员 每一个对象体内 为该对象专有 静态数据成员 程序的静态存储区内,只有一份实体 为该类所有对象共享 成员函数(静 ...