捕获由动态SQL引起的异常

时间:2016-12-31 18:32:47

标签: mysql stored-procedures dynamic-sql

我有一个存储过程,它使用动态SQL调用另一个存储过程。这里提供了代码的简化版本。

CREATE DEFINER=`cmdb`@`%` PROCEDURE `testCall`(procName VARCHAR(100))
BEGIN

   DECLARE EXIT HANDLER FOR SQLEXCEPTION 
   BEGIN

       GET DIAGNOSTICS @num = NUMBER;
       GET DIAGNOSTICS CONDITION @num @message = MESSAGE_TEXT, @errNo = RETURNED_SQLSTATE ;
       if @errorMessage is null then
           Set @errorMessage = "No Error Message";
       end if;
       select @errorMessage;
   END;
   select concat("call ", procName, "()") into @proc;
   Prepare stmt FROM @proc;
   Execute stmt;
   deallocate prepare stmt;
END

如果intent是使用testCall调用任意存储过程。当我使用不存在的SP名称作为输入调用testCall时,

call testCall("storedProc4");

我看到以下错误消息:

"No Error Message"

我希望看到类似下面的内容:

"PROCEDURE storedproc4 does not exist"

如何捕获此异常?我已经尝试了一个错误1305的CONTINUE处理程序和一个EXIT处理程序以及类似的结果。

0 个答案:

没有答案