ヘッダーをスキップ
Oracle OLAP DMLリファレンス
11g リリース1(11.1)
E05732-02
  目次へ
目次
索引へ
索引

戻る
戻る
 
次へ
次へ
 

GOTO

OLAP DMLプログラム内のGOTOコマンドは、プログラム内の文の実行順序を変更します。

構文

GOTO label

引数

label

「ラベルの構成のガイドライン」に従って構成された、プログラム中の他の位置にあるラベルの名前。プログラムの実行は、指定したラベルの直後の行に分岐します。

GOTOに指定するlabelの後にはコロンを付ける必要はありません。ただし、プログラムの他の位置にある実際のラベルの後にはコロンを付けます。

注意

ラベルの構成のガイドライン

特定の位置に分岐する制御構造を使用する場合、位置を明確に識別するためにその位置のラベルを指定する必要があります。ラベルを作成するには、次のガイドラインに従います。

不明なGOTOラベル

labelに対応する実際のラベルが同じプログラムの他の位置に存在しない場合、エラーとともに実行が停止します。

IFおよびWHILEとともに使用するGOTO

次の構文に基づいて、GOTO文をIF...THEN...ELSEまたはWHILEと組み合せて使用することにより、条件分岐を設定できます。

IF boolean-expression

   THEN GOTO label1

   ELSE GOTO label2

ただし、プログラミング論理の明確性を保つために、GOTOの使用は最小限にしてください。GOTOはほとんどの場合、FOR、IF...THEN...ELSEまたはWHILEを使用した単独または複数の条件実行文で置き換えることができます。また、同じプログラム内で異なるケースを処理するSWITCHコマンドを使用することもできます。

FORとともに使用するGOTO

FORループでGOTO文を使用すると、ループ内での分岐やループ外への分岐が可能です。GOTO文およびラベルがどこにあるかによって、文の実行順序が変更されます。

FORループの外側のGOTO文を使用してループ内(すなわちループの内側のラベル)に分岐すると、ループの残りが1回実行された後にエラーが発生します。

TEMPSTAT文とGOTO文

プログラムのFORループ処理内部で、DO ... DOEND句がTEMPSTATの後に続く場合、DOEND、BREAK、GOTOのいずれかが検出されると、ステータスはリストアされます。

GOTO文の代替方法

GOTOはプログラム内での分岐を簡単に行えますが、多用するとプログラムの論理が不明瞭になってフローがわかりにくくなります。複数のラベルがあったり、多くのコードをスキップするGOTO文がある複雑なプログラムが該当します。

プログラムの論理を明確に保つために、GOTOの使用は最小限にします。

GOTO文が最良のプログラミング方法であることもありますが、多くの場合はさらに適した代替方法があります。例を次に示します。

FORコマンドで値をループ処理する方法については、例9-136「値をループ処理するFOR文の使用方法」を参照してください。FORループ内でのDO ... DOENDの使用方法については、例9-137「FORループでのDO/DOENDの使用方法」を参照してください。

例9-143 IFとともに使用するGOTO

次の例は、プログラムを実行するときにユーザーが指定する引数によって、3つの地域のうちの1つに関するレポートを生成するプログラムです。ユーザーがEASTWESTまたはCENTRALを指定すると、対応するラベルに実行が分岐し、ラベルに続く文(文グループ1、2または3)が実行されます。ユーザーがそれ以外の引数を指定した場合、実行はargerrorラベルに分岐し、その後の文によってエラー処理が行われます。

DEFINE flexrpt PROGRAM
PROGRAM
IF NOT INLIST('East\nWest\nCentral', UPCASE(ARG(1)))
   THEN GOTO argerror

SWITCH &UPCASE(ARG(1))
DO
CASE 'EAST':
   ..." (statement group 1)
   BREAK
CASE 'WEST':
   ... "(statement group 2)
   BREAK
CASE 'CENTRAL':
   ..." (statement group 3)
   BREAK
DOEND

argerror:
   ..." statements to handle error)

END