Ste*_*one 6 php mysql sqlexception handler
我有一个存储过程,如果出现任何问题,我想在其中回滚。为了做到这一点,我使用了这样的 EXIT HANDLER:
DECLARE EXIT HANDLER FOR sqlexception
begin
ROLLBACK;
end;
Run Code Online (Sandbox Code Playgroud)
但是这样,当我调用这个存储过程时,如果有任何错误,存储过程就会成功,我不知道实际问题是什么。我希望客户端 (php) 记录错误以便对其进行故障排除。所以我这样修改:
DECLARE EXIT HANDLER FOR sqlexception
begin
get diagnostics condition 1
@p1 = MESSAGE_TEXT;
ROLLBACK;
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = @p1;
end;
Run Code Online (Sandbox Code Playgroud)
所以现在存储过程回滚而不是抛出处理程序拦截的异常。这很酷,但有时 MESSAGE_TEXT 超过 128 个字符,在这种情况下我得到:
错误代码:1648。条件项“MESSAGE_TEXT”的数据太长
当然这个解决方案是不可接受的:
DECLARE EXIT HANDLER FOR sqlexception
begin
get diagnostics condition 1
@p1 = MESSAGE_TEXT;
ROLLBACK;
SET @p1=SUBSTRING(@p1,1,128);
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = @p1;
end;
Run Code Online (Sandbox Code Playgroud)
有什么方法可以拦截任何异常,回滚然后向客户端抛出相同的异常?非常感谢您的帮助
正如肯尼所建议的,答案是:
DECLARE EXIT HANDLER FOR sqlexception
begin
ROLLBACK;
RESIGNAL;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2764 次 |
| 最近记录: |