# SET SCHEMA 文

SET SCHEMA 文により、接続の既定スキーマを指定したスキーマに設定できます。 接続から発行される文にて対象のスキーマ名を明示的に指定しなかった場合、既定スキーマが対象のスキーマとなります。

SET SCHEMA文を成功裏に実行するためには、設定するスキーマが存在していなければなりません。 スキーマが存在していなければ、エラーとなります。CREATE SCHEMA 文を参照してください。

SET SCHEMA 文はトランザクション処理されません。それゆえSET SCHEMA 文が実行されると、トランザクションがロールバックされても、SET SCHEMA 文により変更されたスキーマのままです。

#### 構文

    SET [CURRENT] SCHEMA [=]
    { スキーマ名 |
    USER | ? | '<文字列定数>' } | SET CURRENT SQLID [=]
    {
    スキーマ名 | USER | ? | '<文字列定数>' }

スキーマ名は最大で128文字からなる識別子です。スキーマ名は二重引用符で囲まれない限り、大文字小文字を区別しません。(例を挙げると、SYSはsYs、SYs、sysのいずれとも等価です。)

USERは現在のユーザです。現在のユーザが定義されていない場合、現在のスキーマは既定でAPPです。(接続にユーザ名が定義されている場合、そのユーザ名に対応したスキーマがあるなら、それが接続の既定のスキーマとなります。

? は準備された文で利用できる動的な引数です。SET SCHEMA文を準備して、異なるスキーマを値にとって実行することができます。このときスキーマの値は文字列定数と扱われ、大文字小文字が区別されます。例えば、APPを指定するには、"app"ではなく"APP"を使います。

    -- 以下の例は全て等価で、
    -- HOTELというスキーマがあれば動作します。
    SET SCHEMA HOTEL
    SET SCHEMA hotel
    SET CURRENT SCHEMA hotel
    SET CURRENT SQLID hotel
    SET SCHEMA = hotel
    SET CURRENT SCHEMA = hotel
    SET CURRENT SQLID = hotel
    SET SCHEMA "HOTEL" -- クォートされた識別子
    SET SCHEMA 'HOTEL' -- クォートされた文字列
     --小文字のhotelは存在しないので、
     --この例はエラーとなります。
    SET SCHEMA = 'hotel'
     --SQLIDはCURRENTとともに使わなければならないので、
     --この例は失敗します。
    SET SQLID hotel
     -- これによりスキーマは現在のユーザIDに設定されます。
    SET CURRENT SCHEMA USER
    // Javaのプログラムでset schemaを使う例です。
    PreparedStatement ps = conn.PrepareStatement("set schema ?");
    ps.setString(1,"HOTEL");
    ps.executeUpdate();
    ... do some work
    ps.setString(1,"APP");
    ps.executeUpdate();

    ps.setString(1,"app"); //error - string is case sensitive
    // no app will be found
    ps.setNull(1, Types.VARCHAR); //error - null is not allowed

親トピック: SET 文
関連資料
SET ISOLATION 文