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