存储过程怎么捕获SQLEXCEPTION错误的详细信息?

小小爱好者 2017-12-08 10:27:32
CREATE DEFINER=`soxin`@`%` PROCEDURE `AddStore`(in jStoreInfo json)
BEGIN
#一些代码
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SIGNAL SQLSTATE VALUE '99999'
SET MESSAGE_TEXT = '失败不知道为啥';

问题在这里,我如何捕获出发SQLEXCEPTION这个错误的错误信息??
rollback;
END;
#开启事务
start transaction;

#一些代码
set @sqlStr = ‘动态sql语句’


PREPARE stmtNovelSearch FROM @sqlStr;
execute stmtNovelSearch;
deallocate prepare stmtNovelSearch;

commit;
END
...全文
479 5 点赞 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
康三说 2018-12-04


这样弄了之后还是报错 里面的那两个需要定义变量赋值 还是mysql自带获取异常
  • 打赏
  • 举报
回复
小小爱好者 2018-01-05
DECLARE continue HANDLER FOR SQLEXCEPTION 
	GET DIAGNOSTICS CONDITION 1 
    @errno = MYSQL_ERRNO, @errmsg = MESSAGE_TEXT;
#开启事务
 start transaction;
#用户变量初始化
	set @sqlStr = null;
	set @errno =  0;

#第一步:删除info_of_store 表中id为storeId的行
	DELETE FROM info_of_store WHERE id = storeId;
#第二部:删除info_of_stock表中storeId的列
	set @sqlStr  = concat('ALTER TABLE info_of_stock DROP COLUMN `',storeId,'`');
	 if @errno = 0 then
		PREPARE sqlText FROM @sqlStr;
		execute sqlText;
		deallocate prepare sqlText;
	end if;
IF @errno > 0  THEN 
		ROLLBACK;
        set returnJson = json_object("ErrNo",@errno,"Message",@errmsg);
        #由于SQLEXCEPTION捕获所有01(警告) 02(错误)开头的sqlstate异常,所以定义sqlstate要用01 Or 02开头
		#SIGNAL SQLSTATE '02000'   SET MESSAGE_TEXT = @msg ;
	ELSE 
		COMMIT; 
        set returnJson = json_object("ErrNo",@errno,"Message","OK");
	END IF;
END
定义错误后,在容易出问题的地方判断@errno 的值,就知道哪里出错了,如何办!
  • 打赏
  • 举报
回复
小小爱好者 2017-12-08
引用 2 楼 zjcxc 的回复:
CREATE PROCEDURE _p()
BEGIN
	DECLARE EXIT HANDLER FOR SQLEXCEPTION
	BEGIN
		GET DIAGNOSTICS CONDITION 1
			@err = MYSQL_ERRNO,
			@msg = MESSAGE_TEXT
		;
		SIGNAL SQLSTATE '99999' SET MESSAGE_TEXT = @msg;
	END;
	SELECT * FROM _p;
END;
先谢谢 我试试 好使马上接贴
  • 打赏
  • 举报
回复
zjcxc 2017-12-08
CREATE PROCEDURE _p()
BEGIN
	DECLARE EXIT HANDLER FOR SQLEXCEPTION
	BEGIN
		GET DIAGNOSTICS CONDITION 1
			@err = MYSQL_ERRNO,
			@msg = MESSAGE_TEXT
		;
		SIGNAL SQLSTATE '99999' SET MESSAGE_TEXT = @msg;
	END;
	SELECT * FROM _p;
END;
  • 打赏
  • 举报
回复
小小爱好者 2017-12-08
我的意思是,存储过程中我用SQLEXCEPTION来捕获所有sql错误,但是捕获之后 我想用这个错误抛出一个自定义的异常,我想在我的自定义异常里面使用SQLEXCEPTION捕获到的错误信息,我就是不知道如何获取SQLEXCEPTION捕获到的错误?
  • 打赏
  • 举报
回复
相关推荐
发帖
MySQL
加入

5.5w+

社区成员

MySQL相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2017-12-08 10:27
社区公告
暂无公告