Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere 服务器 - SQL 的用法 » SQL 方言和兼容性

 

Transact-SQL 过程中的错误处理

Watcom SQL 方言中的缺省过程错误处理方式与 Transact-SQL 方言中的处理方式不同。缺省情况下,Watcom SQL 方言过程在遇到错误时退出,并且将 SQLSTATE 值和 SQLCODE 值返回到发起调用的环境中。

显式的错误处理可以使用 EXCEPTION 语句来置入到 Watcom SQL 存储过程中,或者,您可以使用 ON EXCEPTION RESUME 语句指示该过程在遇到错误时从下一个语句继续执行。

当 Transact-SQL 方言过程遇到错误时,将从下一个语句继续执行。全局变量 @@error 保存最近执行过的语句的错误状态。您可以在语句之后检查这一变量,以强制从过程中返回。例如,以下语句在出错时将导致退出。

IF @@error != 0 RETURN

当该过程执行完之后,返回值将表明该过程是成功还是失败。此返回状态是一个整数,并且可以按如下方式对其进行访问:

DECLARE @Status INT
EXECUTE @Status = proc_sample
IF @Status = 0
   PRINT 'procedure succeeded'
ELSE
   PRINT 'procedure failed'

下表介绍了内置的过程返回值以及这些值的含义:

定义 SQL Anywhere SQLSTATE
0 过程执行时没有发生错误
-1 缺少对象 42W33、52W02、52003、52W07、42W05
-2 数据类型错误 53018
-3 进程被选作死锁牺牲品 40001、40W06
-4 权限错误 42501
-5 语法错误 42W04
-6 其它用户错误
-7 资源错误,如空间不足 08W26
-10 致命的内部不一致 40W01
-11 致命的内部不一致 40000
-13 数据库损坏 WI004
-14 硬件错误 08W17、40W03、40W04

当 SQL Anywhere SQLSTATE 不适用时,将返回缺省值 -6。

RETURN 语句可用于返回其它整数,由用户定义它们的含义。


使用 RAISERROR 语句的过程
Watcom SQL 方言中与 Transact-SQL 类似的错误处理