例:
test表,字段id,test 类型int id自增DELIMITER $$DROP PROCEDURE IF EXISTS `test`.`test` $$
CREATE PROCEDURE `test`.`test` (in dat int)
BEGIN
insert into test(test) values(dat);
END $$DELIMITER ;call test('asdasd');
肯定报错,dat是数字型的.现在我想实现,在调用这个存储过程的时候如果出错,就往err表中查三个数据,一个是数据库返回的错误,一个是记录传入的参数
以及错误时间.我看了可以用这个,可是没有实例,请赐教
DECLARE {CONTINUE | EXIT} HANDLER FOR {SQLSTATE sqlstate_code| MySQL error code| condition_name} handler_actions
test表,字段id,test 类型int id自增DELIMITER $$DROP PROCEDURE IF EXISTS `test`.`test` $$
CREATE PROCEDURE `test`.`test` (in dat int)
BEGIN
insert into test(test) values(dat);
END $$DELIMITER ;call test('asdasd');
肯定报错,dat是数字型的.现在我想实现,在调用这个存储过程的时候如果出错,就往err表中查三个数据,一个是数据库返回的错误,一个是记录传入的参数
以及错误时间.我看了可以用这个,可是没有实例,请赐教
DECLARE {CONTINUE | EXIT} HANDLER FOR {SQLSTATE sqlstate_code| MySQL error code| condition_name} handler_actions
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