zoukankan      html  css  js  c++  java
  • MySql错误处理(二)

    20.2.10. 条件和处理程序

    特定条件需要特定处理。这些条件可以联系到错误,以及子程序中的一般流程控制。

    20.2.10.1. DECLARE条件

    DECLARE condition_name CONDITION FOR condition_value
     
    condition_value:
        SQLSTATE [VALUE] sqlstate_value
     | mysql_error_code

    这个语句指定需要特殊处理的条件。它将一个名字和指定的错误条件关联起来。这个名字可以随后被用在DECLARE HANDLER语句中。请参阅20.2.10.2节,“DECLARE处理程序”

    除了SQLSTATE值,也支持MySQL错误代码。

    20.2.10.2. DECLARE处理程序

    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

    这个语句指定每个可以处理一个或多个条件的处理程序。如果产生一个或多个条件,指定的语句被执行。

    对一个CONTINUE处理程序,当前子程序的执行在执行 处理程序语句之后继续。对于EXIT处理程序,当前BEGIN...END复合语句的执行被终止。UNDO 处理程序类型语句还不被支持。

    ·         SQLWARNING是对所有以01开头的SQLSTATE代码的速记。

    ·         NOT FOUND是对所有以02开头的SQLSTATE代码的速记。

    ·         SQLEXCEPTION是对所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE代码的速记。

    除了SQLSTATE值,MySQL错误代码也不被支持。

    例如:

    mysql> CREATE TABLE test.t (s1 int,primary key (s1));
    Query OK, 0 rows affected (0.00 sec)
     
    mysql> delimiter //
     
    mysql> CREATE PROCEDURE handlerdemo ()
        -> BEGIN
        ->   DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2 = 1;
        ->   SET @x = 1;
        ->   INSERT INTO test.t VALUES (1);
        ->   SET @x = 2;
        ->   INSERT INTO test.t VALUES (1);
        ->   SET @x = 3;
        -> END;
        -> //
    Query OK, 0 rows affected (0.00 sec)
     
    mysql> CALL handlerdemo()//
    Query OK, 0 rows affected (0.00 sec)
     
    mysql> SELECT @x//
        +------+
        | @x   |
        +------+
        | 3    |
        +------+
        1 row in set (0.00 sec)

    注意到,@x是3,这表明MySQL被执行到程序的末尾。如果DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2 = 1; 这一行不在,第二个INSERT因PRIMARY KEY强制而失败之后,MySQL可能已经采取 默认(EXIT)路径,并且SELECT @x可能已经返回2。

  • 相关阅读:
    可视化工具D3.js教程 入门 (第三章)—— 理解 Update Enter Exit
    可视化工具D3.js教程 入门 (第二章)—— 选择元素与数据绑定
    可视化工具D3.js教程 入门 (第一章)—— hello world
    可视化工具D3.js教程 入门 (V5版)
    [译]C语言实现一个简易的Hash table(3)
    [译]C语言实现一个简易的Hash table(2)
    [译]C语言实现一个简易的Hash table(1)
    C/C++中的malloc、calloc和realloc
    数据结构--单向链表
    使用Screen管理远程会话
  • 原文地址:https://www.cnblogs.com/lancidie/p/7444859.html
Copyright © 2011-2022 走看看