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

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 语句 » SQL 语句 (P-Z)

 

RAISERROR 语句

此语句用于发出错误信号和向客户端发送消息。

语法
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-numberformat-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 选项 [数据库]