mysql游标和错误控制实例

本文详细介绍了SQL中游标的应用及其错误控制方法,通过创建并操作表来演示如何使用游标进行数据处理,并展示了错误代码1329的含义及处理方式。

一, 游标

游标的使用主要包括四个步骤:

1) 申明游标 declare cursor_name for select statement;

2)打开游标  open cursor_name;

3)fetch 传递值 fetch cursor_name into param_list;

4)关闭游标  close cursor_name;

二 , 错误控制

DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement
 
handler_type:
    CONTINUE
 | EXIT
 | UNDO
 
condition_value:
    SQLSTATE [VALUE] sqlstate_value
 | condition_name
 | SQLWARNING
 | NOT FOUND
 | SQLEXCEPTION
 | mysql_error_code

请看如下实例:

创建table a1;

CREATE TABLE `a1` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

创建table a2:

CREATE TABLE `a2` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1

将a1 的数据拷贝到a2的存储过程:

create procedure copy(IN a int)

BEGIN
#Routine body goes here...
declare b int;
declare c varchar(10);
declare d int;
declare c1 cursor for select * from kkk.a1;
declare exit handler for 1329
begin
insert into  kkk.error_log(code,msg,time) values('1329','No data - zero rows fetched, selected, or processed',now());
end;
open c1;
set d=1;
repeat
fetch c1 into b,c;
insert into kkk.a2 values(b,c);
set d=d+1;
until a<d
end repeat;
close c1;

END

在这个例子中错误代码1329 表示没有数据,当a1为空时调用该存储过程,则会产生1329错误,此时将错误信息插入error_log表中。


a1中插入数据存储过程:

create procedure insertdata(IN a int)

BEGIN
#Routine body goes here...
declare b int default 1;
declare exit handler for SQLEXCEPTION 
begin
insert into  kkk.error_log(code,msg,time) values('00000','No data - zero rows fetched, selected, or processed',now());
end;
while b<=a
do
insert into kkk.a1 values(b,concat(b,'x'));
set b=b+1;
end while;


END


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值