SET CURRENT OPTIMIZATION PROFILE ステートメント

SET CURRENT OPTIMIZATION PROFILE ステートメントは、CURRENT OPTIMIZATION PROFILE 特殊レジスターに値を割り当てます。 この値は、動的 DML ステートメントを準備するときにオプティマイザーが使用しなければならない最適化プロファイルを指定します。

このステートメントは、トランザクションの制御下にありません。

ステートメントが評価されると、最適化プロファイルの名前が妥当であるかどうかが検査されますが、プロファイル自体は、オプティマイザーが動的 DML ステートメントを検出するまで処理されません。

呼び出し

このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 このステートメントは、動的に作成できる実行可能ステートメントです。

許可

必要ありません。

構文

Read syntax diagramSkip visual syntax diagramSET CURRENT OPTIMIZATION PROFILE= optimization-profile-namehost-variablestring-constantNULL

説明

最適化プロファイル名
最適化プロファイルの 2 部構成の名前。 この名前は、リテラル、ホスト変数、または特殊レジスターを使用して指定できます。 指定された名前は、CURRENT OPTIMIZATION PROFILE 特殊レジスターに入力される名前です。

指定した optimization-profile-name が修飾されていない場合、CURRENT DEFAULT SCHEMA レジスターの値が暗黙的な修飾子として使用されます。 特殊レジスターのデフォルト値は NULL です。

ホスト変数 (host-variable)
最適化プロファイルの名前を含む、タイプ CHAR または VARCHAR の変数です。 NULL 標識を含んだホスト変数は、現行のパッケージに対して OPTPROFILE BIND オプションの値が指定されている場合にはその値を使用するということを示します。 長さがゼロあるいは空白文字のみのホスト変数は、最適化プロファイルを使用しないということを示します。

ホスト変数は次の特性を満たしていなければなりません。

  • ストリングの内容が、単一 ID であるかまたは 2 部構成の ID (ピリオドで区切る) であり、先行ブランクがない。
  • ID を区切りありまたは区切りなしにすることができる。
  • ストリングの内容が大文字に変換されていない。
  • 区切りなしストリングでは小文字および特殊文字を使用できない。
  • 先頭文字が二重引用符である場合、終了二重引用符はピリオドの前に置かれるか、あるいはストリング内の最後の非ブランク文字でなければならない。
  • ピリオドの後に続く先頭文字が二重引用符である場合、ストリング内の最後の非ブランク文字は二重引用符でなければならない。
  • ID が区切られている場合、二重引用符を ID に含めるには、その文字を 2 回指定する。
  • 区切り ID の内側にないピリオドは区切り記号として扱われ、ストリング内に存在可能なピリオドの区切り文字は、1 つだけである。
ストリング定数
最適化プロファイルの名前である文字ストリングとして定数を指定します。 ストリング定数の内容は、ホスト変数と同じ特性を満たしている必要があります。
NULL
CURRENT OPTIMIZATION PROFILE レジスターを NULL に設定します。

表 1 に、最適化プロファイルの命名規則に従ってレジスターを割り当てるために使用できるストリング・リテラルと ID の例を示します。 「SCHEMA」列および「NAME」列内の値は、OPT_PROFILE 表に現れ得る形の最適化プロファイル名を表します。 「有効なストリング・リテラル」列は、対応する「SCHEMA」列および「NAME」列の値で指定された最適化プロファイルと一致するストリング・リテラルを示しています。 「有効な ID」列は、同じ最適化プロファイルを識別する ID を示しています。

表 1. ストリング・リテラルおよび ID の例
SCHEMA 名前 有効なストリング・リテラル 有効な ID
SIMMEN BIG_PROF 'BIG_PROF'

'SIMMEN.BIG_PROF'

'"BIG_PROF"'

'"SIMMEN"."BIG_PROF"'

BIG_PROF

SIMMEN.BIG_PROF

"BIG_PROF"

"SIMMEN"."BIG_PROF"

SIMMEN low_profile '"low_profile"'

'SIMMEN."low_profile"'

'"SIMMEN"."low_profile"'

"low_profile"

SIMMEN."low_profile"

"SIMMEN". "low_profile"

eliaz DBA3 'DBA3'

'"DBA3"'

'"eliaz".DBA3'

'"eliaz"."DBA3"'

DBA3

"eliaz".DBA3

"eliaz"."DBA3"

SNOW PROFILE1.0 '"PROFILE1.0"'

'SNOW."PROFILE1.0"'

'"SNOW"."PROFILE1.0"'

"PROFILE1.0"

SNOW."PROFILE1.0"

"SNOW"."PROFILE1.0"

  • レジスターの値が既存の最適化プロファイルの名前を指定している場合、後続の動的 DML ステートメントを準備するときには、指定された最適化プロファイルが使用されます。
  • レジスターの値が NULL である場合、後続の動的 DML ステートメントを準備するときには、OPTPROFILE BIND オプションで指定された最適化プロファイルがあれば、それが使用されます。
  • レジスターの値が NULL であり、OPTPROFILE BIND オプションが設定されていない場合、後続の動的 DML ステートメントを準備するときに最適化プロファイルは使用されません。
  • レジスターの値が空ストリングである場合、OPTPROFILE BIND オプションが設定されているかどうかにかかわらず、後続の動的 DML ステートメントを準備するときには最適化プロファイルは使用されません。
  • その後に CURRENT DEFAULT SCHEMA に変更を加えても、最適化プロファイルには影響しません。 CURRENT OPTIMIZATION PROFILE レジスターの値は、SET CURRENT OPTIMIZATION PROFILE ステートメントが評価された時点で有効になる、2 部構成の名前で設定されます。 使用される最適化プロファイルを変更する唯一の方法は、別の SET CURRENT OPTIMIZATION PROFILE ステートメントを実行することです。

  • 例 1: ステートメント 1、2、および 3 には最適化プロファイル RICK.FOO が使用されます。 ステートメント 4 には TOM.FOO が使用されます。
       SET CURRENT SCHEMA = 'RICK'
       SET CURRENT OPTIMIZATION PROFILE = 'FOO'
          statement 1
          statement 2
       SET CURRENT SCHEMA = 'TOM'
          statement 3
       SET CURRENT OPTIMIZATION PROFILE = 'FOO'
          statement 4
  • 例 2: 以下のステートメントを持つアプリケーションが、オプション OPTPROFILE("Foo") および QUALIFIER("John") を指定してバインドされました。 ステートメント 1 には最適化プロファイル KAAREL.BAR が使用され、ステートメント 2 には最適化プロファイル "John"."Foo" が使用されます。
       SET CURRENT SCHEMA = 'KAAREL' 
       SET CURRENT OPTIMIZATION PROFILE = 'BAR' 
          statement 1 
       SET CURRENT SCHEMA = "Tom" 
       SET CURRENT OPTIMIZATION PROFILE NULL  
          statement 2 
  • 例 3: 空ストリングは、最適化プロファイルを何も使用しないことを示す特殊値です。 ステートメント 1 には最適化プロファイル "Hamid"."Foo" が使用され、ステートメント 2 には最適化プロファイルが何も使用されません。
       SET CURRENT OPTIMIZATION PROFILE = '"Hamid"."Foo"' 
          statement 1
       SET CURRENT OPTIMIZATION PROFILE = '' 
          statement 2