我有一个存储过程,它使用动态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处理程序以及类似的结果。