SQLERRM 标量函数-检索错误消息信息

有两个版本的 SQLERRM 标量函数。 第一个选项允许完全灵活地进行消息检索,包括使用消息标记和语言选择。 第二个仅采用 SQLCODE 作为输入参数,并以英语返回短消息。

SQLERRM 标量函数

此 SQLERRM 标量函数采用消息标识,语言环境和令牌输入,并返回指定语言环境中的短消息或长消息。 如果服务器不支持输入语言环境,那么将以英语返回消息。

语法

Read syntax diagramSkip visual syntax diagramSQLERRM(msgid, tokens, token_delimiter, locale, shortmsg)

模式为 SYSPROC。

标量函数参数

消息标识
类型为 VARCHAR (9) 的输入参数,表示应该检索其信息的消息号。 消息号是以 "SQL" , "DBA" 或 "CLI" 为前缀的应用程序返回码。 例如, "SQL551" , "CLI0001"。 消息号也可以是 SQLSTATE ,例如 "42829"。
令牌
类型为 VARCHAR (70) 的输入参数,用于表示错误消息令牌列表。 某些消息可能没有令牌。 如果此参数为空,那么在返回的消息中不会发生令牌替换。 仅当返回缺省短消息时,才会发生令牌替换。 如果选择了长消息选项,那么不会发生令牌替换。
token_delimiter
类型为 VARCHAR (1) 的输入参数,用于表示令牌定界符。 此定界符必须是唯一的,并且不包含在传递到标量函数的任何标记中。 如果未提供定界符,那么使用的缺省定界符为分号。
语言环境
类型为 VARCHAR (33) 的输入参数,表示要传递到服务器的语言环境,以便以该语言检索错误消息。 如果未指定语言环境,或者服务器不支持该语言环境,那么将以英语返回消息并返回警告。
短消息
类型为 INTEGER 的输入参数,用于指示是否应返回长消息而不是缺省短消息。 要返回长消息,必须将此值设置为 0 或 CAST (NULL 作为 INTEGER)。

权限

需要下列其中一项权限才能执行此例程:
  • 对例程的 EXECUTE 特权
  • DATAACCESS 权限
  • DBADM 权限
  • SQLADM 权限

缺省 PUBLIC 特权

在非限制性数据库中,当自动创建该功能时,将向 PUBLIC 授予 EXECUTE 特权。

返回的信息

结果的数据类型为 VARCHAR (32672)。

示例

示例 1: 使用标记 "AYYANG" , "UPDATE" 和 "SYSCAT.TABLES" 检索 SQL0551N 的英语短消息。
VALUES (SYSPROC.SQLERRM 
   ('SQL551', 'AYYANG;UPDATE;SYSCAT.TABLES', ';', 'en_US', 1))
以下是返回的输出示例。
1
--------------------------------------------------------------...--
SQL0551N "AYYANG" does not have the privilege to perform operation 
   "UPDATE" on object "SYSCAT.TABLES"
示例 2: 检索与 SQLSTATE 42501 关联的英语错误消息。
VALUES (SYSPROC.SQLERRM ('42501', '', '', 'en_US', 1))
以下是返回的输出示例。
1
---------------------------------------------------------------...--
SQLSTATE 42501: The authorization ID does not have the privilege to 
   perform the specified operation on the identified object.
示例 3: 检索 SQL1001N的英语长错误消息。
VALUES (SYSPROC.SQLERRM ('SQL1001', '', '', 'en_US', 0))
以下是返回的输出示例。
1
------------------------------------------------------------...--
SQL1001N "<name>" is not a valid database name.

Explanation:

The syntax of the database name specified in the command is not
valid.  The database name must contain 1 to 8 characters and all
the characters must be from the database manager base character
set.

 The command cannot be processed.

User Response:

Resubmit the command with the correct database name.

 sqlcode :  -1001

 sqlstate :  2E000

SQLERRM 标量函数

此 SQLERRM 标量函数采用 SQLCODE 作为唯一输入,并以英语返回指定 SQLCODE 的短消息。

语法

Read syntax diagramSkip visual syntax diagramSQLERRM(sqlcode)

模式为 SYSPROC。

标量函数参数

sqlcode
类型为 INTEGER 的输入参数,用于表示 SQLCODE。

权限

需要下列其中一项权限才能执行此例程:
  • 对例程的 EXECUTE 特权
  • DATAACCESS 权限
  • DBADM 权限
  • SQLADM 权限

缺省 PUBLIC 特权

在非限制性数据库中,当自动创建该功能时,将向 PUBLIC 授予 EXECUTE 特权。

返回的信息

结果的数据类型为 VARCHAR (32672)。

示例

检索 SQLCODE SQL0551N的短消息。
VALUES (SYSPROC.SQLERRM (551))
以下是返回的输出示例。
1
--------------------------------------------------------------...--
SQL0551N  "" does not have the privilege to perform operation 
   "" on object "".