zoukankan      html  css  js  c++  java
  • 错误解决mysql

    当遇到一个NOT FOUND(无数据)的警告时,使用一个包含清除警告语句的条件句柄处理,就可以继续处理程序并退出句柄。
    这个问题在MySQL5.6.3之后的版本已经解决了,所以该解决方法不是必要的。
    解决方法:  
      DECLARE CONTINUE HANDLER FOR NOT FOUND
        BEGIN
        SET done=1 SELECT 1 INTO @handler_invoked FROM (SELECT 1) AS t; END;
    来源:Click the link(http://dev.mysql.com/doc/refman/5.5/en/condition-handling.html) and scroll to the bottom for details but the fix was to include a successful select INSIDE the CONTINUE HANDLER:
     
    原文:

    Before MySQL 5.6.3, if a statement that generates a warning or error causes a condition handler to be invoked, the handler may not clear the diagnostic area. This might lead to the appearance that the handler was not invoked. The following discussion demonstrates the issue and provides a workaround.

    Suppose that a table t1 is empty. The following procedure selects from it, raising a No Data condition:

    CREATE PROCEDURE p1()
    BEGIN
      DECLARE a INT;
      DECLARE CONTINUE HANDLER FOR NOT FOUND
        BEGIN
          SET @handler_invoked = 1;
        END;
      SELECT c1 INTO a FROM t1;
    END;
    

    As can be seen from the following sequence of statements, the condition is not cleared by handler invocation (otherwise, the SHOW WARNINGS output would be empty). But as can be seen by the value of @handler_invoked, the handler was indeed invoked (otherwise its value would be 0).

    mysql> SET @handler_invoked = 0;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> CALL p1();
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    
    mysql> SHOW WARNINGS;
    +---------+------+-----------------------------------------------------+
    | Level   | Code | Message                                             |
    +---------+------+-----------------------------------------------------+
    | Warning | 1329 | No data - zero rows fetched, selected, or processed |
    +---------+------+-----------------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> SELECT @handler_invoked;
    +------------------+
    | @handler_invoked |
    +------------------+
    |                1 |
    +------------------+
    1 row in set (0.00 sec)
    

    To work around this issue, use a condition handler containing a statement that clears warnings:

    CREATE PROCEDURE p1()
    BEGIN
      DECLARE a INT;
      DECLARE CONTINUE HANDLER FOR NOT FOUND
        BEGIN
          SELECT 1 INTO @handler_invoked FROM (SELECT 1) AS t;
        END;
      SELECT c1 INTO a FROM t1;
    END;
    

    This works for CONTINUE and EXIT handlers.

    This issue is resolved as of MySQL 5.6.3 and no workaround is needed.

     
     
    牧羊童Gamir——随遇而安,保持一颗愉快之心!
  • 相关阅读:
    CentOS Grub、BASH 故障、解决方法
    Fail2ban 阻止暴力破解
    Extundelete 数据恢复
    HTTP 状态信息
    LNMP 参数调优 ( 无注释 )
    Mysql 性能优化 ( my.cnf )
    MantisBT 缺陷管理系统
    Zabbix Agent 源码编译安装
    Zabbix 监控 Mysql 状态
    Zabbix 监控 Nginx 状态
  • 原文地址:https://www.cnblogs.com/gamir/p/4307772.html
Copyright © 2011-2022 走看看