SET SCHEMA

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

呼び出し

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

権限

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

  • ステートメント内で識別されるグローバル変数に対して、
    • そのグローバル変数に対する READ 特権
    • グローバル変数が含まれるスキーマに対する USAGE 特権
  • データベース管理者権限

構文

構文図を読む構文図をスキップする
          .-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 です。