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---------------------------------------'
- 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" となります。