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 ISOLATION 文