ヘッダーをスキップ
Oracle® OLAP DMLリファレンス
11gリリース2 (11.2)
B61346-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

SWITCHコマンド

SWITCHコマンドは、プログラムに複数のパスを持つブランチを設定するコマンドです。プログラムの実行中に使用される特定のパスは、SWITCHにより指定される制御式の値によって決まります。SWITCH文は、プログラム内でのみ使用できます。


注意:

単独のSWITCHコマンドと、式の条件演算子として使用されるSWITCHを混同しないでください。「SWITCH式」を参照してください。

構文

SWITCH control-expression

   DO

      CASE case-expression1:

          statement 1.1

           ...

          statement 1.n

           BREAK

      CASE case-expression2:

           statement 2.1

           ...

           statement 2.n

           BREAK

      [DEFAULT:

           statement n.1

           ...

           statement n.n

           BREAK]

   DOEND

パラメータ

control-expression

control-expression引数は、SWITCH文によりプログラム制御を移行する先のCASEラベルを指定する引数です。SWITCH文が実行されると、control-expressionが評価され、プログラムの各CASEラベル式と比較されます。一致が見つかると、制御はそのCASEラベルに移行されます。一致が見つからない場合、制御はDEFAULTラベル(存在する場合)またはSWITCHのDOENDに続く文に移行されます。

CASE case-expression1, CASE case-expression2, ...

その式(case-expression1case-expression2、...)により、処理を行う複数のCASEを指定するCASEラベルです。control-expressioncase-expressionに一致する場合、プログラム制御はそのCASEラベルに移行されます。CASEラベル式はプログラムの実行時に、記述されている順序で、一致が見つかるまで評価されます。

DEFAULTラベルはオプションです。case-expressionsに一致するcontrol-expressionがない場合に制御が移行される、特別なCASEを指定します。DEFAULTを省略し、一致が見つからない場合は、制御はSWITCHのDOENDに続く文に移行されます。

SWITCH文のすべてのCASEラベル(DEFAULTを含む)は、SWITCH文の直後のDOとDOENDの間に含める必要があります。case-expressionはラベルであるため、末尾にコロン(:)を付ける必要があります。特定のCASEで実行する文は、ラベルの後に記述する必要があります。通常、CASEの最後の文はBREAKにしますが、これは、SWITCHからの制御を、SWITCHのDOENDに続く文に移行します。

CASEの終わりでBREAK(またはRETURN、SIGNALなど)を省略した場合、プログラムは次のCASEの文を同様に実行し始めます。通常、このような処理は必要ありません。しかし、2つのCASEで同じ文を実行する必要がある場合は、文の前に両方のCASEラベルを配置することによりこの処理方法を活用できます。

使用上の注意

control-expressionおよびcase-expression

SWITCH control-expressionには任意のデータ型を指定でき、case-expressionsも同様です。様々なcase-expressionsに、種々のデータ型を指定できます。control-expressionまたはcase-expressionとしてディメンションの名前(リテラル、非引用テキスト式として)を指定する場合、Oracle OLAPは一致を検索する際に、ディメンション名ではなくディメンションの現行のステータス・リストにある最初の値を使用します。ディメンションのステータス・リストに値がない場合、Oracle OLAPは値NAを使用します。NAcontrol-expressionは、最初のNAcase-expressionに一致します。

SWITCHでのアンパサンド置換

SWITCH control-expressionまたはCASEラベルcase-expressionでは、アンパサンド置換を使用しないようにします。アンパサンドは予測不可能な結果を生成し、その結果は多くの場合に適切ではありません。

複数のSWITCHコマンド

プログラムには、複数のSWITCH文を含めることができます。さらに、SWITCHコマンドをネストすることもできます。プログラムに複数のSWITCHコマンドが含まれている場合、SWITCHコマンドがネストされている場合でも、各コマンドにそれぞれのDEFAULTラベルを指定できます。

制御の移行

BREAKは、SWITCH文内でのプログラム制御の移行に一般的に使用される文ですが、他にも同じ目的で使用できる文があります。CONTINUEGOTORETURNおよびSIGNALなどの文も使用できます。SWITCH文がFORまたはWHILEループ内にある場合は、CONTINUEのみを使用できることに注意してください。それらの文や、DO ... DOENDの項も参照してください。

例10-153 プログラムにおけるSWITCHを使用した複数パスへの分岐

次のプログラム行では、複数タイプのレポートの中から1つのタイプのレポートが生成されます。SWITCH文の前で、プログラムはユーザーが必要とするレポートのタイプを判断し、変数userchoiceMarketまたはFinanceの値を配置します。プログラムは、その名前に一致するCASEラベルに切り替わり、レポートを生成します。レポートが完了すると、BREAK文によって制御がDOENDの後のクリーンアップ・セクションに移行されます。

SWITCH userchoice
    DO
         CASE 'Market':
            ...
            BREAK
         CASE 'Finance':
            ...
            BREAK
         DEFAULT:
            ...
            BREAK
    DOEND
cleanup:
...