mysql存储过程处理错误

1定义错误处理程序
DECLARE action HANDLER FOR condition_value statement;
action:可以是 CONTINUE(继续执行)或 EXIT(退出当前块)。
condition_value:可以是错误代码、SQLSTATE 或预定义的错误类型(如 SQLEXCEPTION)。
statement:错误发生时执行的语句。
2 预定义的错误类型
SQLEXCEPTION:捕获所有异常。
SQLWARNING:捕获所有警告。
NOT FOUND:捕获 SELECT ... INTO 或游标未找到数据的错误。
3常见的 MySQL 错误代码
1062:唯一键冲突(Duplicate entry)。
1048:字段不能为 NULL(Column cannot be null)。
1054:未知列(Unknown column)。
1146:表不存在(Table doesn't exist)。
1216:外键约束失败(Cannot add or update a child row)。
1217:外键约束失败(Cannot delete or update a parent row)。
4使用 SIGNAL 抛出错误
在存储过程中,可以使用 SIGNAL 语句主动抛出错误。
SIGNAL SQLSTATE 'sqlstate' SET MESSAGE_TEXT = 'error_message';
例如:
CREATE PROCEDURE test_signal()
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SELECT 'Error occurred: ', MESSAGE_TEXT;
END;

IF 1 = 1 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Custom error message';
END IF;
END //

示例:
BEGIN
declare i int;
declare d double;
declare exit handler for SQLEXCEPTION
begin
rollback;
end;
start TRANSACTION;
set i=0;
while i<3 do
set i=i+1;
set d=rand();
if d between 0.2 and 0.8 THEN
insert into t1 values(d,now());
ELSE
signal SQLSTATE '41000';
end if;
end while;
commit;
end

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容