SET SCHEMA
SET SCHEMA ステートメントは、CURRENT SCHEMA 特殊レジスターの値を変更します。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込むことができ、また対話式に呼び出すこともできます。 これは、動的に準備できる実行可能ステートメントです。
権限
ステートメント内のグローバル変数を参照する場合は、ステートメントの権限 ID が保持する特権に、少なくとも次のいずれか 1 つが含まれなければなりません。
- ステートメント内で識別されるグローバル変数に対して、
- そのグローバル変数に対する READ 特権
- そのグローバル変数を含むライブラリーに対する *EXECUTE システム権限
- データベース管理者権限
構文
.-CURRENT-. .-␠=␠-. >>-SET--+-+---------+--SCHEMA-+--+-----+------------------------> '-CURRENT_SCHEMA------' >----+-schema-name------+-------------------------------------->< +-+-SESSION_USER-+-+ | '-USER---------' | +-+-CURRENT USER-+-+ | '-CURRENT_USER-' | +-SYSTEM_USER------+ +-variable---------+ +-string-constant--+ '-DEFAULT----------'
説明
- schema-name
- スキーマを識別します。指定されたスキーマ名がシステム・スキーマ名である場合、現行スキーマの設定時には、そのスキーマが存在するかどうかについての検査は行われません。
指定されたスキーマ名がシステム・スキーマ名ではない場合、現行スキーマの設定時に、そのスキーマが存在していなければなりません。
指定された値がスキーマ名 に関する規則と一致しない場合、エラーが戻されます。
- SESSION_USER または USER
- この値は SESSION_USER 特殊レジスターです。
- CURRENT USER
- CURRENT USER 特殊レジスターの値を指定します。
- SYSTEM_USER
- この値は SYSTEM_USER 特殊レジスターです。
- variable
- スキーマ名を含む変数を指定します。
スキーマ名で修飾すれば、グローバル変数を使用することもできます。内容が大文字に変換されることはありません。
変数は、次の条件に合っていなければなりません。
- 文字ストリングまたは Unicode グラフィック変数でなければなりません。末尾ブランクを切り取った後の variable の内容の実際の長さは、スキーマ名の長さを超えてはなりません。 SQL の制約を参照してください。
- その後に標識変数が続くことはできません。
- NULL 値とすることはできません。
- 通常の ID または区切り文字付き ID の形成に関する規則に従っていなければなりません。
- 変数が固定長である場合、右側はブランクで埋め込まれています。
- キーワード SESSION_USER、CURRENT_USER、SYSTEM_USER、 または USER であってはなりません。
- SET ステートメントが SQL ルーチン、SQL トリガー、または複合ステートメントで指定された場合、 variable を非修飾名のグローバル変数にすることはできません。
- string-constant
- スキーマ名を含む文字定数。
ストリング定数は次の条件を満たしている必要があります。
- 末尾ブランクを切り取った後の長さが、スキーマ名の最大長を超えないこと。
- スキーマ名が左寄せで入っており、通常 ID または区切り文字付き ID の形式の規則に準拠していること。
- キーワード SESSION_USER、CURRENT_USER、 SYSTEM_USER、または USER であってはなりません。
- DEFAULT
- CURRENT SCHEMA は初期値に設定されます。 SQL 命名規則の場合の初期値は USER です。 システム命名規則の場合の初期値は *LIBL です。
注
キーワードに関する考慮事項: 単一のキーワード (USER など) を単一のキーワードとして指定することと、区切り文字付き ID として指定することとは違います。 USER 特殊レジスターの現行値を現行スキーマの設定のために使用することを指示するには、USER をキーワードとして指定してください。 代わりに USER を区切り文字付き ID ("USER" など) として指定した場合、 それはその値のスキーマ名 ("USER") として解釈されます。
トランザクションに関する考慮事項: SET SCHEMA ステートメントは、コミット可能な操作ではありません。ROLLBACK は、CURRENT SCHEMA には影響を与えません。
その他の特殊レジスターに対する影響: CURRENT SCHEMA 特殊レジスターの設定により、CURRENT PATH 特殊レジスターが影響を受けることはありません。 したがって、SQL パスには CURRENT SCHEMA は組み込まれな いため、関数、プロシージャー、およびユーザー定義タイプの解決でこれらの オブジェクトが見つからないことがあります。 現行スキーマの値を SQL パスに組み込むには、SET SCHEMA ステートメント を発行するときに、必ず、SET SCHEMA ステートメントからのスキーマ名を含 む SET PATH ステートメントも発行するようにしてください。
CURRENT SCHEMA: CURRENT SCHEMA 特殊レジスターの値は、DYNDFTCOL が指定されている プログラムの場合を除き、すべての動的 SQL ステートメントの中の一部の 非修飾名の修飾子として使用されます。 プログラム内で DYNDFTCOL が指定されている場合は、そのスキーマ名が CURRENT SCHEMA のスキーマ名の代わりに使用されます。 名前の修飾については、非修飾オブジェクト名の修飾を参照してください。
SQL 命名規則の場合は、CURRENT SCHEMA 特殊レジスターの初期値は USER になります。 システム命名規則の場合は、CURRENT SCHEMA 特殊レジスターの初期値は '*LIBL' です。
代替の構文: CURRENT SCHEMA の同義語として、CURRENT SQLID を使用できます。 SET CURRENT SQLID ステートメントの効果は、SET CURRENT SCHEMA ステートメントと同じです。 他の効果 (ステートメント権限の変更など) は発生しません。
SET SCHEMA を使用することは、QSQCHGDC API を呼び出すことと同じです。
例
例 1: 次のステートメントは、CURRENT SCHEMA 特殊レジスターを設定します。
SET SCHEMA = RICK
例 2: 次の例では、CURRENT SCHEMA 特殊レジスターの現行値を検索して、 CURSCHEMA というホスト変数に入れます。
EXEC SQL VALUES(CURRENT SCHEMA) INTO :CURSCHEMA
値は、例えば例 1 で設定された RICK です。