我是sybase的新手。经过一番研究后,我开始知道以下是在 sybase 存储过程中处理错误/异常的正确方法。
CREATE PROCEDURE dbo.sp_testErrorHandling (@age varchar(20))
AS
BEGIN
DECLARE @myerr int
BEGIN TRANSACTION mytrans
DELETE FROM TestStoredProc where Name='Z'
IF @@error<>0 BEGIN SELECT @myerr=@@error GOTO failed END
DECLARE @result int
EXECUTE @result = 5/0 /* throws an exception */
IF @@error<>0 BEGIN SELECT @myerr=@@error GOTO failed END
COMMIT TRANSACTION mytrans
RETURN 0
failed:
ROLLBACK TRANSACTION mytrans
return @myerr
END
我想,这个存储过程会返回异常除零对应的错误代码。但实际上它正在抛出异常。请帮助我理解这种行为。 问候, 阿尼班 阿尼班
为了能够更好地捕获/处理“被零除”错误,您必须为 Sybase 服务器中的arithignore arith_overflow 系统选项设置适当的值。 Sybase 联机手册中有一些很好的文档,网址为:
一旦你将
@@error
赋值给任何变量,那么@@error
的值就变成了0
。
为避免此用户临时表并将 @@error 插入该临时表,然后再次从表中获取值并使用该值。