什么是mysql相当于sql server的try catch块

时间:2015-12-22 05:43:21

标签: mysql sql-server stored-procedures

我正在尝试将存储过程从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

1 个答案:

答案 0 :(得分:0)

似乎在mysql中没有try catch等价物

但是有一种方法可以使用SIGNAL来处理错误

  

SIGNAL是“返回”错误的方法。 SIGNAL提供错误   信息到处理程序,应用程序的外部,或   给客户。此外,它还提供对错误的控制   特征(错误号,SQLSTATE值,消息)。没有   SIGNAL,有必要采取故意的解决方法   引用一个不存在的表来使例程返回一个   错误。