MySQL中与SQL Server的try catch块相当的是什么?

3

我正在尝试将一个存储过程从SQL Server迁移到MySQL。在转换try catch块时遇到了一些问题。我知道DECLARE HANDLER可以用于代替MySQL中的TRY/CATCH块。如何使用DECLARE HANDLER在MySQL存储过程中复制这个CATCH语句的功能呢?

BEGIN CATCH
CLOSE transDetails //cursor name
CLOSE transQuoteOptionDetails//another cursor name
DEALLOCATE transDetails 
DEALLOCATE transQuoteOptionDetails
DECLARE @ErrorMessage   varchar(2000),@ErrorSeverity  tinyint,@ErrorState  tinyint
SET @ErrorMessage  = ERROR_MESSAGE()
SET @ErrorSeverity = ERROR_SEVERITY()
SET @ErrorState    = ERROR_STATE()
Delete From MasterReport_Temp where masterReportRecNo=@masterReportRecNo
Update MasterReport set status=3, errorDescription=@ErrorMessage where recNo=@masterReportRecNo                   

 END CATCH

正如你所读到的,你需要声明一个处理程序来处理特定的错误条件。如果没有看到TRY块,任何人都不知道错误条件可能是什么? - miken32
谢谢@miken32,我想知道在MySQL存储过程中,如果在某个阶段发生错误,是否有一种方法可以执行一些语句,例如UPDATE、DELETE和CREATE语句。如果可能,请给我代码。 - Arun nagar
1个回答

0

看起来MySQL中没有try catch的等效物

但是你可以使用SIGNAL来处理错误

SIGNAL是“返回”错误的方法。SIGNAL向处理程序、应用程序的外部部分或客户端提供错误信息。此外,它还提供了对错误特性(错误编号、SQLSTATE值、消息)的控制。如果没有SIGNAL,则需要采用一些变通方法,例如故意引用不存在的表来导致例程返回错误。


谢谢@Leonidas Menendez,我知道MySQL中信号的概念,但我的问题是是否有一种方法可以使用HANDLER定义多个语句,以及如何实现?请给我提供代码。 - Arun nagar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接