GET_ROUTINE_NAME プロシージャー - SQL PL オブジェクト名の取得
GET_ROUTINE_NAME プロシージャーは、オブジェクトの LIB_ID が指定された場合に、その SQL PL オブジェクトの名前を返します。
許可
以下のいずれかの権限が必要です。
- ルーチンに対する EXECUTE 特権
- DATAACCESS 権限
- SQLADM 権限
- DBADM 権限
デフォルトの PUBLIC 特権
制限のないデータベースでは、このプロシージャーが自動的に作成されると、SELECT 特権が PUBLIC に付与されます。
構文
スキーマは SYSPROC です。
ルーチン・パラメーター
- lib_id
- コンパイル済み SQL PL ルーチンまたはトリガーに対応する LIB_ID を指定する、タイプ INTEGER の入力引数。 これは、ランタイム SQL PL エラーの SQLCA にある SQLERRD(4) フィールドの値です。
- type
- エラーを引き起こしたオブジェクトのタイプを指定する、タイプ CHAR(1) の出力引数。以下のいずれかの値を使用します。
- 'P' - プロシージャー
- 'F' - 関数
- 'T' - トリガー
- schema
- オブジェクトが属するスキーマを指定する、タイプ VARCHAR(128) の出力引数。
- module
- オブジェクトが属するモジュールを指定する、タイプ VARCHAR(128) の出力引数。 オブジェクトがトリガーである場合、またはモジュールに属していない場合は、NULL になります。
- name
- オブジェクトの名前を指定する、タイプ VARCHAR(128) の出力引数。
- specific_name
- オブジェクトの特定名を指定する、タイプ VARCHAR(128) の出力引数。 オブジェクトがトリガーの場合は、NULL になります。
使用上の注意
- SQLCA 構造に、SQL PL ルーチンまたはトリガーの実行時に発生したエラーが入っている場合、SQLCAID フィールドには値 'SQLCAM' が入り、SQLERRM(4) にはエラーを引き起こしたオブジェクトを一意的に識別する数値が入ります。 このユニーク ID は、SYSCAT.ROUTINES および SYSCAT.TRIGGERS カタログ・ビューの LIB_ID 列に対応します。 GET_ROUTINE_NAME ルーチンは、指定された LIB_ID 値を、対応するオブジェクト名にマップします。
- SYSPROC.GET_ROUTINE_NAME に指定した最初の引数の値が SQL PL のルーチンまたはトリガーに対応していない場合、このプロシージャーはすべての出力パラメーターに NULL を返し、ルーチンまたはトリガーが見つからなかったことを示します。
例
アプリケーションの実行がエラー終了し、SQLCA 構造に以下の情報が記述されているとします。
SQLCA Information
sqlcaid : SQLCAM sqlcabc: 136 sqlcode: -801
...
sqlerrd : (1) 0 (2) 0 (3) 3
(4) 13152254 (5) 0 (6) 0
...
sqlstate: 22012SQLCAID フィールドに SQLCAM とあることから、SQL PL オブジェクトの実行中にエラーが発生したことが分かります。
SQLERRD(3) および SQLERRD(4) フィールドに 3 および 13152254 という値があることは、値 13152254 によって識別される SQL PL オブジェクトの 3 行目にあるステートメントがエラーの発生原因であることを示しています。
その SQL PL オブジェクトが何であるかを判別するには、次のような方法で SYSPROC.GET_ROUTINE_NAME を呼び出します。
db2 call "GET_ROUTINE_NAME(13152254, ?, ?, ?, ?, ?)"
Value of output parameters
--------------------------
Parameter Name : OBJTYPE
Parameter Value : P
Parameter Name : OBJSCHEMA
Parameter Value : APPDEV
Parameter Name : OBJMODULE
Parameter Value : -
Parameter Name : OBJNAME
Parameter Value : PROC2
Parameter Name : OBJSPECIFIC
Parameter Value : APPDEV_PROC2
Return Status = 0
SYSPROC.GET_ROUTINE_NAME への呼び出しから得られる OUT パラメーターの値は、ストアード・プロシージャー APPDEV.PROC2 からエラーが発生したことを示しています。
