gpt4 book ai didi

MySQL存储过程-区分note和error

转载 作者:行者123 更新时间:2023-11-29 00:00:10 24 4
gpt4 key购买 nike

我有一个执行存储 SQL 的存储过程。

但是,错误处理程序会在用户尝试执行时启动并退出

drop temporary table if exists t_person;

并且“t_person”不存在。我很高兴在未给出“if exists”时生成错误,但是如何避免早期情况的错误(错误代码未更改)?

这是我的错误处理程序:

DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
set @sql = 'select \'Invalid SQL or bad parameter resulting in invalid SQL\' as `Error`';
prepare stmt from @sql;
execute stmt;
END;

最佳答案

您可以使用 CONTINUE 处理程序而不是 EXIT 处理程序来捕获 MySQL 错误 1051“未知表”...

DECLARE CONTINUE HANDLER FOR 1051 BEGIN END;

-或-

DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02' BEGIN END;

编辑

要在异常处理程序中捕获 MySQL 错误,需要指定要捕获的 MySQL 错误号或相应的 SQLSTATE。 (您可以指定命名条件,但该命名条件必须解析为 MySQL 错误号或 SQLSTATE)。

语法错误会引发 MySQL 错误 1064。

如果表 foo 存在,并且您发出一个

CREATE TEMPORARY TABLE IF NOT EXISTS `foo` (id INT);

那会抛出 MySQL 错误 1050。

要捕获该错误,请为此声明另一个处理程序。假设您想“吞下”异常并继续处理...

DECLARE CONTINUE HANDLER FOR 1050 BEGIN END;

引用:https://dev.mysql.com/doc/refman/5.5/en/error-messages-server.html


<罢工>drop temporary table 语句中的like p_person 在我看来是错误的;至少,我不熟悉在 DROP TABLE 语句中使用 LIKE 关键字。

关于MySQL存储过程-区分note和error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30171886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com