Plsql-goto-statement
提供:Dev Guides
PL/SQL-GOTOステートメント
PL/SQLプログラミング言語の GOTO ステートメントは、GOTOから同じサブプログラム内のラベル付きステートメントへの無条件ジャンプを提供します。
注-GOTOステートメントの使用は、プログラムの制御フローをトレースすることを難しくし、プログラムを理解しにくく、変更しにくくするため、どのプログラミング言語でも推奨されません。 GOTOを使用するプログラムは、GOTOを必要としないように書き換えることができます。
構文
PL/SQLのGOTO文の構文は次のとおりです-
GOTO label;
..
..
<< label >>
statement;
流れ図
例
DECLARE
a number(2) := 10;
BEGIN
<<loopstart>>
-- while loop execution
WHILE a < 20 LOOP
dbms_output.put_line ('value of a: ' || a);
a := a + 1;
IF a = 15 THEN
a := a + 1;
GOTO loopstart;
END IF;
END LOOP;
END;
/
上記のコードがSQLプロンプトで実行されると、次の結果が生成されます-
value of a: 10
value of a: 11
value of a: 12
value of a: 13
value of a: 14
value of a: 16
value of a: 17
value of a: 18
value of a: 19
PL/SQL procedure successfully completed.
GOTOステートメントの制限
PL/SQLのGOTOステートメントは、次の制限を課します-
- GOTOステートメントは、IFステートメント、CASEステートメント、LOOPステートメント、またはサブブロックに分岐できません。
- GOTOステートメントは、IFステートメントの句から別の句に、またはCASE文のWHEN句から別の句に分岐できません。
- GOTOステートメントは、外側のブロックからサブブロック(つまり、内側のBEGIN-ENDブロック)に分岐できません。
- GOTOステートメントは、サブプログラムから分岐できません。 サブプログラムを早期に終了するには、RETURNステートメントを使用するか、GOTOをサブプログラムの終了直前の場所に分岐させます。
- GOTOステートメントは、例外ハンドラーから現在のBEGIN-ENDブロックに戻ることはできません。 ただし、GOTOステートメントは、例外ハンドラーから外側のブロックに分岐できます。