2015-12-22 56 views
3

我正在尝试将存储过程从SQL Server迁移到MySQL。在try catch块的转换过程中,我遇到了一些问题。我知道DECLARE HANDLER可以用来代替MySQL中的TRY/CATCH块。如何使用DECLARE HANDLER在MySQL存储过程中复制此CATCH语句的功能?什么是SQL服务器的try catch块的mysql等价物

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 [email protected] 
Update MasterReport set status=3, [email protected] where [email protected]     

END CATCH 
+0

正如您必须阅读,您声明了处理特定错误条件的处理程序。在没有看到TRY块的情况下,谁能知道错误情况会是什么? – miken32

+0

谢谢@ miken32,我想知道是否有一种方式即时通讯MySQL的存储过程,当某些阶段发生错误时,然后一些stetement执行像UPDATE,DELETE和CREATE语句将execute.please给我如果可能的代码 –

回答

0

好像没有尝试捕捉相当于在MySQL

但有办法可以使用SIGNAL

信号为“回报”的错误的方式来处理错误。 SIGNAL向客户端提供错误 信息给处理程序,应用程序的外部或 。此外,它还提供对错误 特征(错误编号,SQLSTATE值,消息)的控制。如果没有 SIGNAL,则需要使用变通方法,例如故意引用 来引用不存在的表,以使例程返回 错误。

+0

谢谢@莱奥尼达斯梅嫩德斯,我知道信号在mysql中的概念,但我的问题是,有没有办法用HANDLER和如何定义多个语句?请给我代码 –