为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

MySQL存储过程 ERROR Handler 异常处理

2017-08-31 4页 doc 17KB 8阅读

用户头像

is_594886

暂无简介

举报
MySQL存储过程 ERROR Handler 异常处理MySQL存储过程 ERROR Handler 异常处理 问题样例:当insert失败时,我希望将其记录在日志文件中, 在这里需 要创建一个主键表,以及一个外键表,我们使用的是Innodb ,因此外 键关联检查是打开的,当我向外键表中插入非主键表中的值时,动作将 会失败,创建的数据表如下: create table t2(s1 int primary key)engine=innodb;// create table t3(s1 int, key(s1), foreign key (s1) references t2...
MySQL存储过程 ERROR Handler 异常处理
MySQL存储过程 ERROR Handler 异常处理 问题样例:当insert失败时,我希望将其在日志文件中, 在这里需 要创建一个主键表,以及一个外键表,我们使用的是Innodb ,因此外 键关联检查是打开的,当我向外键表中插入非主键表中的值时,动作将 会失败,创建的数据表如下: create table t2(s1 int primary key)engine=innodb;// create table t3(s1 int, key(s1), foreign key (s1) references t2(s1))engine=innodb;// create table error_log(error_message char(80));// 1. 建立一个过程,第一个语句 DECLARE EXIT HANDLER是用来处理异 常的,意思是如果错误 1216发生,这个程序将会在错误中插入 一行, EXIT的意思是 当动作成功提交后推出这个复合语句。 create procedure p22(parameter int) begin declare exit Handler for 1452 insert into error_log values(concat('Time: ',current_date,'.Foreign key reference failure for value=',parameter)); insert into t3 values(parameter); end;// 2. 申明异常处理的语法 DECLARE HANDLER syntax: DECLARE {EXIT|CONTINUE} HANDLER FOR {error_number|{SQLSTATE error-string}|condition} SQL Statement 上面就是错误处理的用法,也就是一段当程序出错后自动触发的代 码,MYSQL允许两种处理器,一种是exit处理,另外一种是 continue处 理,与exit 不同的是在于他执行后,原主程序仍然继续运行,那么该复合语句 就没有出口了。 ----continue处理的例子: create table t4(s1 int primary key);// create procedure p23() begin declare continue handler for SQLSTATE '23000' set @x2=1; set @x=1; insert into t4 values (1); set @x=2; insert into t4 values(1); set @x=3; select @x, @x2; end;// call p23();// ---- rollback(回滚事务),定义自己的错误处理名字 declare '错误处理 名' condition for SQLSTATE'23000'; create procedure p24() begin declare ViolationSelf condition for SQLSTATE'23000'; DECLARE EXIT HANDLER for ViolationSelf rollback; start transaction; insert into t2 values(1); insert into t2 values(1); commit; end;// /******************************************** Cursor游标 ******************************************************** **/ 游标实现功能的摘要: 声明游标, 打开游标,从游标里读取,关闭游 标 DECLARE cursor-name CURSOR FOR SELECT ?????? OPEN cursor-name; FETCH cursor-name INTO variable; CLOSE cursor-name; 1. create procedure p25(out return_val int) begin DECLARE a,b,c int; DECLARE cur_1 CURSOR for select s1 from t; DECLARE continue handler for not found set b=1; open cur_1; set c=0; repeat fetch cur_1 into a; until b=1 end repeat; close cur_1; set return_val=a; end;// 2. create procedure p25_1(out return_val int) begin DECLARE a,b,c int; DECLARE cur_1 CURSOR for select s1 from t; DECLARE continue handler for not found set b=1; open cur_1; set c=0; lable_1:loop fetch cur_1 into a; if b=1 then leave lable_1; end if; set c=c+1; end loop; close cur_1; set return_val=c; end;// create procedure p34(in va int) begin delete from t where s1=va; end;//
/
本文档为【MySQL存储过程 ERROR Handler 异常处理】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索