那在存储过程中,如果有select a+b;这样的语句,存储过程就不会再执行下去了。能不能继续执行下去? 比如我的存储过程:DELIMITER $$CREATE PROCEDURE sp_test(OUT errcode INT) BEGIN select a+b; if @@error_count>0 then …… end if; END$$DELIMITER ;
我修改了一下存储过程 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
ERROR 1054 (42S22): Unknown column 'a' in 'field list'
mysql> select @@error_count;
+---------------+
| @@error_count |
+---------------+
| 1 |
+---------------+
1 row in set (0.00 sec)mysql>
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 只是标志你一次查询语句的错误
比如我的存储过程:DELIMITER $$CREATE PROCEDURE sp_test(OUT errcode INT)
BEGIN
select a+b;
if @@error_count>0 then
……
end if;
END$$DELIMITER ;
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
不能,语法出错连create procedure 都无法完成。
http://topic.csdn.net/u/20090903/15/f74871e2-d827-498c-bcaf-2d3e5520ce6b.html