Sybase存储过程异常处理

问题描述 投票:0回答:2

我是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

我想,这个存储过程会返回异常除零对应的错误代码。但实际上它正在抛出异常。请帮助我理解这种行为。 问候, 阿尼班 阿尼班

exception stored-procedures error-handling sybase
2个回答
1
投票

为了能够更好地捕获/处理“被零除”错误,您必须为 Sybase 服务器中的arithignore arith_overflow 系统选项设置适当的值。 Sybase 联机手册中有一些很好的文档,网址为:

http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc32300.1550/html/sqlug/X47118.htm


0
投票

一旦你将

@@error
赋值给任何变量,那么
@@error
的值就变成了
0
。 为避免此用户临时表并将 @@error 插入该临时表,然后再次从表中获取值并使用该值。

© www.soinside.com 2019 - 2024. All rights reserved.