如何处理mysql存储过程中的任何错误。 [英] How to handle any error in mysql stored procedure.

查看:116
本文介绍了如何处理mysql存储过程中的任何错误。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个存储过程,使用了一些处理程序1062处理程序和1264处理程序

1062处理程序正常工作。但是1264处理程序无法正常工作。创建sp并执行时



- 显示1062错误正确



致电insert_article_tags_2(1,1)





- 没有显示超出范围错误

调用insert_article_tags_2(155555555555555,1877777755555555555)



为什么请提前帮助我。谢谢。



我的尝试:



I have created a stored procedure with using some handlers 1062 handler and 1264 handler
1062 handler working fine.but 1264 handler is not working.After creating sp and while executing

--showing 1062 error correct

call insert_article_tags_2(1,1)


--it is not showing out of range errror
call insert_article_tags_2(155555555555555,1877777755555555555)

why please help me on this.thanks in advance.

What I have tried:

DELIMITER $$
CREATE PROCEDURE insert_article_tags_2(IN article_id INT, IN tag_id INT)
BEGIN
 
 declare exit handler for sqlexception
 select 'sql exception invoked';
 
 
 DECLARE EXIT HANDLER FOR 1062 
 
        SELECT 'MySQL error code 1062 invoked';
        
 DECLARE EXIT HANDLER FOR 1264

	SELECT 'Out of range exception';


 -- insert a new record into article_tags
 INSERT INTO article_tags(article_id,tag_id)
   VALUES(article_id,tag_id);
    
END

推荐答案

CREATE PROCEDURE insert_article_tags_2( IN article_id INT IN tag_id INT
BEGIN

声明 退出 handler for sqlexception
select ' 调用sql异常';


DECLARE 退出 HANDLER FOR 1062

SELECT 调用MySQL错误代码1062';

DECLARE 退出 HANDLER FOR 1264

SELECT ' 超出范围的例外';


- 在article_tags中插入新记录
INSERT INTO article_tags(article_id,tag_id)
VALUES (article_id的,TAG_ID);

END
CREATE PROCEDURE insert_article_tags_2(IN article_id INT, IN tag_id INT) BEGIN declare exit handler for sqlexception select 'sql exception invoked'; DECLARE EXIT HANDLER FOR 1062 SELECT 'MySQL error code 1062 invoked'; DECLARE EXIT HANDLER FOR 1264 SELECT 'Out of range exception'; -- insert a new record into article_tags INSERT INTO article_tags(article_id,tag_id) VALUES(article_id,tag_id); END


这取决于你打电话的地方/>
It depends from where you are calling
call insert_article_tags_2(155555555555555,1877777755555555555)

传递的参数超出了32位整数可以保存的值(使用的类型为SQL INT )。语言/ shell或你调用它的地方可能只是截断传递的参数:

The passed arguments are beyond the values that can be hold by a 32-bit integer (the used type for SQL INT). The language / shell or from where you are calling it may just truncate the passed arguments:

155555555555555 = 8D7A19A1B8E3 hex

这可能被截断为

That may be truncated to

19A1B8E3 hex = 430029027

这是一个有效值。


这篇关于如何处理mysql存储过程中的任何错误。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆