【问题标题】:what is the mysql equivalent of sql server's try catch block什么是 mysql 等效的 sql server try catch 块
【发布时间】:2016-03-28 07:47:21
【问题描述】:

我正在尝试将存储过程从 SQL Server 迁移到 MySQL。我在转换 try catch 块时遇到了一些问题。我知道 DECLARE HANDLER 可以用来代替 MySQL 中的 TRY/CATCH 块。如何在 MySQL 存储过程中使用DECLARE HANDLER 复制此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,我想知道当在某个阶段发生错误时,有没有办法在mysql存储过程中执行一些语句,如UPDATE、DELETE和CREATE语句将执行。如果可能,请给我代码

标签: mysql sql-server stored-procedures


【解决方案1】:

好像mysql中没有try catch等价物

但是您可以使用 SIGNAL 处理错误

SIGNAL 是“返回”错误的方式。 SIGNAL 提供错误 信息到处理程序,应用程序的外部部分,或 给客户。此外,它还提供了对错误的控制 特征(错误号、SQLSTATE 值、消息)。没有 信号,有必要诉诸变通办法,如故意 引用一个不存在的表导致例程返回一个 错误。

【讨论】:

  • 感谢@Leonidas Menendez,我知道 mysql 中信号的概念,但我的问题是有没有办法用 HANDLER 定义多个语句以及如何?请给我代码
猜你喜欢
  • 1970-01-01
  • 2010-11-15
  • 2011-01-23
  • 2020-04-15
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
  • 2010-11-19
  • 1970-01-01
相关资源
最近更新 更多