2015-12-22 39 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和如何定義多個語句?請給我代碼 –

相關問題