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引数は、SWITCH文によりプログラム制御を移行する先のCASEラベルを指定する引数です。SWITCH文が実行されると、control-expressionが評価され、プログラムの各CASEラベル式と比較されます。一致が見つかると、制御はそのCASEラベルに移行されます。一致が見つからない場合、制御はDEFAULTラベル(存在する場合)またはSWITCHのDOENDに続く文に移行されます。
その式(case-expression1、case-expression2、...)により、処理を行う複数のCASEを指定するCASEラベルです。control-expressionがcase-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
を使用します。NA
のcontrol-expressionは、最初のNA
のcase-expressionに一致します。
SWITCHでのアンパサンド置換
SWITCH control-expressionまたはCASEラベルcase-expressionでは、アンパサンド置換を使用しないようにします。アンパサンドは予測不可能な結果を生成し、その結果は多くの場合に適切ではありません。
複数のSWITCHコマンド
プログラムには、複数のSWITCH文を含めることができます。さらに、SWITCHコマンドをネストすることもできます。プログラムに複数のSWITCHコマンドが含まれている場合、SWITCHコマンドがネストされている場合でも、各コマンドにそれぞれのDEFAULTラベルを指定できます。
制御の移行
BREAKは、SWITCH文内でのプログラム制御の移行に一般的に使用される文ですが、他にも同じ目的で使用できる文があります。CONTINUE、GOTO、RETURNおよびSIGNALなどの文も使用できます。SWITCH文がFORまたはWHILEループ内にある場合は、CONTINUEのみを使用できることに注意してください。それらの文や、DO ... DOENDの項も参照してください。
例
例10-153 プログラムにおけるSWITCHを使用した複数パスへの分岐
次のプログラム行では、複数タイプのレポートの中から1つのタイプのレポートが生成されます。SWITCH文の前で、プログラムはユーザーが必要とするレポートのタイプを判断し、変数userchoice
にMarket
またはFinance
の値を配置します。プログラムは、その名前に一致するCASEラベルに切り替わり、レポートを生成します。レポートが完了すると、BREAK文によって制御がDOENDの後のクリーンアップ・セクションに移行されます。
SWITCH userchoice DO CASE 'Market': ... BREAK CASE 'Finance': ... BREAK DEFAULT: ... BREAK DOEND cleanup: ...