如何在存储过程中抛出 SQLException

11

我如何在存储过程中抛出异常?例如:

@temp int =0

As 
BEGIN
SELECT @int = COUNT(*) FROM TABLE1
END

IF(@temp>0)
throw SQL Exception

附言:不使用返回值


5
MySQL 还是 MSSQL 服务器?还是两者都要? - Preet Sangha
2个回答

18

RAISERROR 用于 MSSQL Server。如 @Marc Gravell 所述:异常的严重性必须 >=16,才能作为 SqlException 抛出。

要在 MySQL 中使用,请参阅此 SO 答案

博客文章还展示了如何在 MySQL(如果<=6.0)中实现。


14
请注意,严重性必须大于等于16才能作为“SqlException”显示。 - Marc Gravell
@MarcGravell - 我不明白 severity >=16 是什么意思? - Zameer Ansari
1
@zameeramir SQL Server 有严重性级别的概念;只有16及以上的级别作为异常浮现... - Marc Gravell

1
在MySQL中,存储过程没有抛出异常的方法,但是你可以通过从不存在的表中进行选择来强制产生错误。
如果表名能够描述错误,那么这将会有所帮助。 例如:
DELIMITER $$

CREATE PROCEDURE throw_exception (IN param1 INTEGER)
BEGIN
  DECLARE testvar INTEGER;
  SELECT testfield INTO testvar FROM atable WHERE id = param1 LIMIT 1;
  IF testfield IS NULL THEN
     /*throw the error here*/
     SELECT * FROM 
       error_testfield_in_atable_not_found_youve_entred_a_nonexisting_id_in_throw_exception;
  END IF;
END $$

DELIMITER ;

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