此语句用于发出错误信号和向客户端发送消息。
RAISERROR error-number [ format-string ] [, arg-list ]
error-number error-number 是大于 17000 的五位整数。错误号存储在全局变量 @@error 中。
format-string 如果未提供 format-string 或为空,则使用错误号在系统表中查找错误消息。Adaptive Server Enterprise 从 SYSMESSAGES 表中获取的消息范围为 17000-19999。在 SQL Anywhere 中,此表为空视图,因此这个范围内的错误消息应该提供格式字符串。错误号大于或等于 20000 的消息从 ISYSUSERMESSAGE 表中获取。
在 SQL Anywhere 中,format-string 的长度最多可达 255 字节。
SQL Anywhere 不支持 Adaptive Server Enterprise 中的 RAISERROR 语句所支持的扩展值。
对于可选参数列表中的参数,格式字符串可以包含占位符。这些占位符的形式为 %nn!,其中 nn 是介于 1 和 20 之间的整数。
中间 RAISERROR 状态和代码信息在过程终止后会丢失。如果在返回时伴随 RAISERROR 发生了错误,则返回错误信息,而 RAISERROR 信息将丢失。应用程序可以通过在不同的执行点检查 @@error 全局变量来查询中间 RAISERROR 状态。
RAISERROR 语句允许发出用户定义的错误并向客户端发送消息。
无。
无。
SQL/2003 服务商扩充。
以下语句引发错误 23000(该错误在用户定义的错误范围内),并向客户端发送消息。请注意,error-number 和 format-string 参数之间没有逗号。逗号后的第一项被解释为参数列表中的第一项。
RAISERROR 23000 'Invalid entry for this column: %1!', @val |
下一个示例使用 RAISERROR 禁止连接。
CREATE PROCEDURE DBA.login_check() BEGIN // Allow a maximum of 3 concurrent connections IF( DB_PROPERTY('ConnCount') > 3 ) THEN RAISERROR 28000 'User %1! is not allowed to connect -- there are ' || 'already %2! users logged on', Current User, CAST( DB_PROPERTY( 'ConnCount' ) AS INT )-1; ELSE CALL sp_login_environment; END IF; END go GRANT EXECUTE ON DBA.login_check TO PUBLIC go SET OPTION PUBLIC.login_procedure='DBA.login_check' go |
有关禁止连接的其它方法,请参见login_procedure 选项 [数据库]。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |