SET PATH

SET PATH ステートメントは、CURRENT PATH 特殊レジスターの値を変更します。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込むことができ、また対話式に呼び出すこともできます。 これは、動的に準備できる実行可能ステートメントです。

権限

ステートメント内のグローバル変数を参照する場合は、ステートメントの権限 ID が保持する特権に、少なくとも次のいずれか 1 つが含まれなければなりません。

  • ステートメント内で識別された、それぞれのグローバル変数ごとに、
    • そのグローバル変数に対する READ 特権
    • そのグローバル変数を含むライブラリーに対する *EXECUTE システム権限
  • データベース管理者権限

構文

構文図を読む構文図をスキップする
                     .-FUNCTION-.                      
          .-CURRENT--+----------+-.          .-␠=␠-.   
>>-SET--+-+-----------------------+--PATH-+--+-----+------------>
        '-CURRENT_PATH--------------------'            

     .-,---------------------------------------.         
     V                                         |   (1)   
>--+---+-schema-name-------------------------+-+-+-------------><
   |   +-SYSTEM PATH-------------------------+   |       
   |   +-+-SESSION_USER-+--------------------+   |       
   |   | '-USER---------'                    |   |       
   |   +-+-CURRENT USER-+--------------------+   |       
   |   | '-CURRENT_USER-'                    |   |       
   |   +-SYSTEM_USER-------------------------+   |       
   |   |              .-FUNCTION-.           |   |       
   |   |   .-CURRENT--+----------+-.         |   |       
   |   +-+-+-----------------------+--PATH-+-+   |       
   |   | '-CURRENT_PATH--------------------' |   |       
   |   +-variable----------------------------+   |       
   |   '-string-constant---------------------'   |       
   '-*LIBL---------------------------------------'       

注:
  1. SYSTEM PATH、SESSION_USER、USER、 CURRENT_USER、SYSTEM_USER、 および CURRENT PATH は、ステートメントの右側におのおの 1 回まで指定できます。

説明

schema-name
スキーマを識別します。指定されたスキーマ名がシステム・スキーマ名である場合、PATH の設定時には、そのスキーマが存在するかどうかについての検査は行われません。 例えば、スキーマ名 をミススペルした場合、 後続の SQL の操作はその影響を受けます。 指定されたスキーマ名がシステム・スキーマ名ではない場合、PATH の設定時に、そのスキーマが存在していなければなりません。

推奨されていることではありませんが、PATH が「PATH」として指定されている場合、それをスキーマ名 として指定できます。

SYSTEM PATH
システム・パスのスキーマ名を指定します。この値を指定することは、スキーマ名として "QSYS"、"QSYS2"、 "SYSPROC"、"SYSIBMADM" を指定する場合と同じになります。
SESSION_USER または USER
SESSION_USER 特殊レジスターの値を指定します。
CURRENT USER
CURRENT USER 特殊レジスターの値を指定します。
SYSTEM_USER
SYSTEM_USER 特殊レジスターの値を指定します。
CURRENT PATH
このステートメントの実行前の CURRENT PATH 特殊レジスターの値を指定します。現行パスが *LIBL の場合、CURRENT PATH は許されません。
variable
コンマで区切られた、1 つ以上のスキーマ名を含む変数を指定します。 スキーマ名で修飾すれば、グローバル変数を使用することもできます。

変数は、次の条件に合っていなければなりません。

  • CHAR、VARCHAR、Unicode GRAPHIC、または Unicode VARGRAPHIC 変数でなければなりません。 変数 の内容の実際の長さは、パスの最大長を超えることはできません。
  • その後に標識変数が続くことはできません。
  • NULL 値とすることはできません。
  • 各スキーマ名は、通常の ID または区切り文字付き ID の形成に関する規則に従っていなければなりません。
  • 各スキーマ名には、通常の ID に指定できない小文字の文字が含まれていることはできません。
  • 変数が固定長文字である場合、右側はブランクで埋め込まれています。
  • SET ステートメントが SQL ルーチン、SQL トリガー、または複合ステートメントで指定された場合、 variable を非修飾名のグローバル変数にすることはできません。
string-constant
コンマで区切られた 1 つ以上のスキーマ名を持つ文字定数。

ストリング定数は次の条件を満たしている必要があります。

  • 各スキーマ名は、通常の ID または区切り文字付き ID の形成に関する規則に従っていなければなりません。
  • 各スキーマ名には、通常の ID に指定できない小文字の文字が含まれていることはできません。
*LIBL
パスは現行スレッドのライブラリー・リストに設定されます。

トランザクションに関する考慮事項: SET PATH ステートメントは、 コミット可能な操作ではありません。 ROLLBACK は、CURRENT PATH には影響を与えません。

SQL パスの内容についての規則:

  • スキーマ名は、パス内で複数回使用できません。
  • 指定可能なスキーマの数は、CURRENT PATH 特殊レジスターの合計長によって 制限されます。特殊レジスター・ストリングは、指定された各スキーマ名か ら末尾ブランクを除去し、二重引用符によって区切り、コンマで各スキーマ 名を区切って作成します。作成されたストリングの長さが 3483 バイトを超 えると、エラーが戻されます。パスには最大 268 のスキーマ名を表示できます。
  • 単一のキーワード (USER、PATH、CURRENT_PATH など) を単一のキーワードとして 指定することと、区切り文字付き ID として指定することとは違います。 単一のキーワードとして指定された特殊レジスターの現行値を SQL パスで使用するように指定するには、 その特殊レジスターの名前をキーワードとして指定します。 代わりに、特殊レジスターの名前を区切り文字付き ID ("USER" など) として指定した場合、 それはその値のスキーマ名 ('USER') として解釈されます。 例えば、USER 特殊レジスターの現行値が SMITH であるとすると、 SET PATH = SYSIBM、USER、"USER" の結果は、"SYSIBM"、"SMITH"、"USER" の CURRENT PATH 値となります。
  • SET PATH ステートメントに指定した値が変数であるかスキーマ名 であるかは、 以下の規則によって判別されます。
    • 名前 が SQL プロシージャー内のパラメーターまたは SQL 変数と等しい場合、 名前 はパラメーターまたは SQL 変数として解釈され、 名前 内の値が PATH に割り当てられます。
    • 名前 が SQL プロシージャー内のパラメーターまたは SQL 変数と等しくない場合、 名前スキーマ名 として解釈され、名前 が値として PATH に割り当てられます。

システム・パス: SYSTEM PATH は、プラットフォームのシステム・パスを参照します。スキーマ QSYS、QSYS2、SYSPROC、および SYSIBMADM は指定する必要がありません。これらは、パスに含まれない場合、最後のスキーマとして暗黙的に想定 されます (この場合、CURRENT PATH 特殊レジスターに含まれていません)。

CURRENT PATH 特殊レジスターの初期値は、活動化グループ内で実行された 最初の SQL ステートメントにシステム命名が使用された場合は、*LIBL になります。 最初の SQL ステートメントに SQL 命名が使用された場合、初期値は "QSYS"、 "QSYS2"、"SYSPROC"、"X" (X は USER 特殊レジスターの値) になります。

SQL パスの使用: CURRENT PATH 特殊レジスターは、 動的 SQL ステートメント内でユーザー定義タイプ、関数、およびプロシージャーを解決するために使用されます。 詳しくは、SQL パスを参照してください。

次のステートメントは、CURRENT PATH 特殊レジスターを設定します。

SET PATH = FERMAT, "McDuff", SYSIBM

次のステートメントは、SQL パス特殊レジスターの現行値を検索して、 CURPATH というホスト変数に入れます。

EXEC SQL VALUES (CURRENT PATH) INTO :CURPATH;

直前の例で設定されている場合、この値は "FERMAT"、"McDuff"、"SYSIBM" となります。