SQLERRM スカラー関数 - エラー・メッセージ情報の検索

SQLERRM スカラー関数には 2 つのバージョンがあります。1 つは、メッセージ・トークンの使用や言語選択などを含む、十分に柔軟性をもたせたメッセージ検索を提供します。もう 1 つは、SQLCODE のみを入力パラメーターとし、簡略メッセージを英語で戻します。

SQLERRM スカラー関数

この SQLERRM スカラー関数は、メッセージ ID、ロケール、およびトークンの入力を取り、簡略メッセージまたは詳細メッセージを、指定のロケールで戻します。入力ロケールをサーバーがサポートしていない場合、メッセージは英語で戻されます。

構文

構文図を読む構文図をスキップするSQLERRM(msgid, tokens, token_delimiter, locale, shortmsg)

スキーマは SYSPROC です。

スカラー関数パラメーター

msgid
情報を検索するメッセージ番号を表す、タイプ VARCHAR(9) の入力引数。メッセージ番号は、アプリケーション戻りコードに、接頭部 'SQL'、'DBA'、または 'CLI' を付けたものです。例えば、'SQL551'、'CLI0001' などです。メッセージ番号は、SQLSTATE である場合もあります。例えば、'42829' などです。
tokens
エラー・メッセージのトークン・リストを表す、タイプ VARCHAR(70) の入力引数。トークンのないメッセージもあります。このパラメーターが NULL の場合は、戻されるメッセージでトークンの置き換えはなされません。トークンの置き換えは、デフォルトの簡略メッセージを戻す場合にのみ生じます。詳細メッセージのオプションが選択されている場合、トークンの置き換えは生じません。
token_delimiter
トークンの区切り文字を表す、タイプ VARCHAR(1) の入力引数。この区切り文字は固有でなければならず、スカラー関数に渡されるトークンに含まれていてはなりません。区切り文字が指定されない場合、使用されるデフォルトの区切り文字はセミコロンです。
locale
ロケールを表すタイプ VARCHAR(33) の入力引数。その言語のエラー・メッセージを検索するためにサーバーに渡します。ロケールが指定されていない場合、またはサーバーがそのロケールをサポートしない場合、メッセージは英語で戻され、警告が戻されます。
shortmsg
デフォルトの簡略メッセージの代わりに詳細メッセージを戻すかどうかを示すために使用される、タイプ INTEGER の入力引数。詳細メッセージを戻すには、この値は 0 または CAST(NULL as INTEGER) に設定しなければなりません。

許可

このルーチンを実行するには、以下のいずれかの権限が必要です。
  • ルーチンに対する EXECUTE 特権
  • DATAACCESS 権限
  • DBADM 権限
  • SQLADM 権限

デフォルトの PUBLIC 特権

制限のないデータベースでは、この関数が自動的に作成されると、EXECUTE 特権が PUBLIC に付与されます。

戻される情報

結果のデータ・タイプは VARCHAR(32672) です。

例 1: SQL0551N の英語の簡略メッセージを、トークン "AYYANG"、"UPDATE"、および "SYSCAT.TABLES" の含まれた状態で検索します。
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 に対する簡略メッセージを英語で戻します。

構文

構文図を読む構文図をスキップするSQLERRM(sqlcode)

スキーマは SYSPROC です。

スカラー関数パラメーター

sqlcode
SQLCODE を表す、タイプ INTEGER の入力引数。

許可

このルーチンを実行するには、以下のいずれかの権限が必要です。
  • ルーチンに対する EXECUTE 特権
  • DATAACCESS 権限
  • DBADM 権限
  • SQLADM 権限

デフォルトの PUBLIC 特権

制限のないデータベースでは、この関数が自動的に作成されると、EXECUTE 特権が PUBLIC に付与されます。

戻される情報

結果のデータ・タイプは VARCHAR(32672) です。

SQLCODE SQL0551N の簡略メッセージを検索します。
VALUES (SYSPROC.SQLERRM (551))
以下は戻される出力の例です。
1
--------------------------------------------------------------...--
SQL0551N  "" does not have the privilege to perform operation 
   "" on object "".