在mysql的存储过程中错误处理只有用declare……handle……这一种方式吗?
有没有象mssql那样有一个@@error变量,>0就表示有错误?

解决方案 »

  1.   

    @@error_countmysql> select a+b;
    ERROR 1054 (42S22): Unknown column 'a' in 'field list'
    mysql> select @@error_count;
    +---------------+
    | @@error_count |
    +---------------+
    |             1 |
    +---------------+
    1 row in set (0.00 sec)mysql>
      

  2.   


    mysql> select a+b;
    ERROR 1054 (42S22): Unknown column 'a' in 'field list'
    mysql> select a+b;
    ERROR 1054 (42S22): Unknown column 'a' in 'field list'
    mysql> select a+b;
    ERROR 1054 (42S22): Unknown column 'a' in 'field list'
    mysql> select @@error_count;
    +---------------+
    | @@error_count |
    +---------------+
    |             1 |
    +---------------+
    1 row in set (0.00 sec)
    @@error_count 
    --------------------
    error_count 只是标志你一次查询语句的错误
      

  3.   

    那在存储过程中,如果有select a+b;这样的语句,存储过程就不会再执行下去了。能不能继续执行下去?
    比如我的存储过程:DELIMITER $$CREATE PROCEDURE sp_test(OUT errcode INT)
        BEGIN
    select a+b;
            if @@error_count>0 then
                ……
            end if;
        END$$DELIMITER ;
      

  4.   

    我修改了一下存储过程
    DELIMITER $$
    CREATE sp_test (OUT errcode1 INT,OUT errcode2 INT)
        BEGIN
    DECLARE CONTINUE HANDLER FOR 1452 SELECT 'Foreign key error';
    SET errcode1=@@error_count;
    INSERT INTO acct_access_log (accountno,al_type,al_time,al_address,al_session) VALUES
    (123,0,CURRENT_TIMESTAMP,'192.168.101.171','123456789');
    SET errcode2=@@error_count;
        END$$DELIMITER ;这个程序会因为外键的原因插入不进去,执行之后结果是“Foreign key error”,但是我打印两个传出的参数,都是0。
    还有一个问题,就是加入插入的时候产生其他错误,那我也必须一个一个用declare……handler for……给出来?不能象mssql那样:
    if @@error<>0
    begin
        ……
    end
      

  5.   


    不能,语法出错连create procedure 都无法完成。
      

  6.   

    重新发贴,这个帖子说得不清楚
    http://topic.csdn.net/u/20090903/15/f74871e2-d827-498c-bcaf-2d3e5520ce6b.html