【www.gdgbn.com--php函数】

MySQL在存储过程的异常处理部分使用多个语句
-- 创建测试表格,且没有任何数据
drop table if exists t;
create table t(id int);
-- 创建存储过程
drop procedure if exists test;
delimiter |
create procedure test()
begin
  declare vId int;
  -- 游标,没有数据的结果集
  declare cTest cursor  for select * from t;
  -- 使用begin, end在发生异常时执行多个命令
  DECLARE CONTINUE HANDLER FOR SQLSTATE "02000" begin
    set @done=1;
    set @done2 = 222;
    -- 各种语句都可以使用
 insert into t values (1);
  end;
  -- 启动游标
  open cTest;
  -- 没有数据,抛出异常
  fetch next from cTest into  vid;
  set @done2 = 333;
  close cTest;
end;
|
delimiter ;

-- 测试调用
call test();
-- 查看结果
select @done2 from dual;
select * from t;


结果

Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 6
Server version: 5.1.30-community MySQL Community Server (GPL)

Type "help;" or "h" for help. Type "c" to clear the buffer.

mysql教程> use test;
Database changed
mysql> -- 测试在数据库教程的异常里使用多个语句
mysql> -- 创建测试表格,且没有任何数据
mysql> drop table if exists t;
Query OK, 0 rows affected, 1 warning (0.03 sec)

mysql> create table t(id int);
Query OK, 0 rows affected (0.17 sec)

mysql> -- 创建存储过程
mysql> drop procedure if exists test;
Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> delimiter |
mysql> create procedure test()
    -> begin
    ->   declare vId int;
    ->   -- 游标,没有数据的结果集
    ->   declare cTest cursor  for select * from t;
    ->   -- 使用begin, end在发生异常时执行多个命令
    ->   DECLARE CONTINUE HANDLER FOR SQLSTATE "02000" begin
    ->     set @done=1;
    ->     set @done2 = 222;
    ->     -- 各种语句都可以使用
    ->  insert into t values (1);
    ->   end;
    ->   -- 启动游标
    ->   open cTest;
    ->   -- 没有数据,抛出异常
    ->   fetch next from cTest into  vid;
    ->   set @done2 = 333;
    ->   close cTest;
    -> end;
    -> |
Query OK, 0 rows affected (0.05 sec)

mysql> delimiter ;
mysql>
mysql> -- 测试调用
mysql> call test();
Query OK, 0 rows affected (0.13 sec)

mysql> -- 查看结果
mysql> select @done2 from dual;
+--------+
| @done2 |
+--------+
|    333 |
+--------+
1 row in set (0.00 sec)

mysql> select * from t;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

mysql>

本文来源:http://www.gdgbn.com/jiaocheng/23503/