服务器 频道

MySQL 5.0 新特性教程 存储过程:第四讲

  2. DECLARE CONTINUE HANDLER声明CONTINUE异常处理
  

  CREATE TABLE t4 (s1 int,primary key(s1));//
  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;
  END;//
  
  这次我将为SQLSTATE值定义一个处理程序。还记得前面我们使用的MySQL错误代码1216吗?事实上这里的23000SQLSTATE是更常用的,当外键约束出错或主键约束出错就被调用了。
  
  3. DECLARE CONTINUE HANDLER
  

  CREATE TABLE t4 (s1 int,primary key(s1));//
  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;
  END;//
  
  这个存储过程的第一个执行的语句是"SET @x = 1"。
  
  4. DECLARE CONTINUE HANDLER example
  

  CREATE TABLE t4 (s1 int,primary key(s1));//
  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;
  END;//
  
  运行后值1被插入到主键表中。
  
  5. DECLARE CONTINUE HANDLER
  

  CREATE TABLE t4 (s1 int,primary key(s1));//
  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;
  END;//
  
  然后@x的值变为2。
  
  6. DECLARE CONTINUE HANDLER example
  

  CREATE TABLE t4 (s1 int,primary key(s1));//
  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;
  END;//
  
  然后程序尝试再次往主键表中插入数值,但失败了,因为主键有唯一性限制。
  
  7. DECLARE CONTINUE HANDLER example
  

  CREATE TABLE t4 (s1 int,primary key(s1));//
  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;
  END;//
  
  由于插入失败,错误处理程序被触发,开始进行错误处理。下一个执行的语句是错误处理的语句,@x2被设为2。
  
0
相关文章