GOTO ステートメント
GOTO ステートメントは、SQL プロシージャー内のユーザー定義ラベルに分岐させます。
呼び出し
このステートメントは、SQL プロシージャーに組み込む方法でのみ使用可能です。 このステートメントは実行可能ステートメントではなく、動的に準備することはできません。
許可
必要ありません。
構文
説明
- label
- 処理を続行するラベル付きステートメントを指定します。 このラベル付きステートメントと GOTO ステートメントの有効範囲は同じでなければなりません。
- GOTO ステートメントが FOR ステートメントで定義されている場合、 label は同じ FOR ステートメントの内側で定義しなければなりません。 ただし、ネストされている FOR ステートメントまたはネストされているコンパウンド・ステートメントは除きます。
- GOTO ステートメントがコンパウンド・ステートメントで定義されている場合、 label は同じコンパウンド・ステートメントの内側で定義しなければなりません。 ただし、ネストされている FOR ステートメントまたはネストされているコンパウンド・ステートメントは除きます。
- GOTO ステートメントがハンドラーで定義されている場合、 label は他の有効範囲の規則に従って、同じハンドラーで定義しなければなりません。
- GOTO ステートメントがハンドラーの外側で定義されている場合、 label をハンドラーの内側で定義してはなりません。
注
- GOTO ステートメントは使い過ぎないようにお勧めします。 このステートメントは通常の処理シーケンスを妨げるので、 ルーチンの読み取りおよび保守が困難になります。 なるべく GOTO ステートメントを使用しなくて済むように、GOTO ステートメントを使用する前に、 他のステートメント (IF や LEAVE など) を代わりに使用できるかどうか判別してください。
例
以下のコンパウンド・ステートメントでは、 パラメーター rating および v_empno がプロシージャーに渡されます。 そして、日付期間として出力パラメーター return_parm が戻されます。 従業員のその会社での就労期間が 6 カ月未満の場合、 GOTO ステートメントは制御をプロシージャーの最後に移動させ、 new_salary は未変更のままになります。
CREATE PROCEDURE adjust_salary
(IN v_empno CHAR(6),
IN rating INTEGER,
OUT return_parm DECIMAL (8,2))
MODIFIES SQL DATA
LANGUAGE SQL
BEGIN
DECLARE new_salary DECIMAL (9,2);
DECLARE service DECIMAL (8,2);
SELECT SALARY, CURRENT_DATE - HIREDATE
INTO new_salary, service
FROM EMPLOYEE
WHERE EMPNO = v_empno;
IF service < 600
THEN GOTO EXIT;
END IF;
IF rating = 1
THEN SET new_salary = new_salary + (new_salary * .10);
ELSEIF rating = 2
THEN SET new_salary = new_salary + (new_salary * .05);
END IF;
UPDATE EMPLOYEE
SET SALARY = new_salary
WHERE EMPNO = v_empno;
EXIT: SET return_parm = service;
END