GOTO ステートメント

GOTO ステートメントは、SQL プロシージャー内のユーザー定義ラベルに分岐させます。

呼び出し

このステートメントは、SQL プロシージャーに組み込む方法でのみ使用可能です。 このステートメントは実行可能ステートメントではなく、動的に準備することはできません。

許可

必要ありません。

構文

Read syntax diagramSkip visual syntax diagramGOTOlabel

説明

label
処理を続行するラベル付きステートメントを指定します。 このラベル付きステートメントと GOTO ステートメントの有効範囲は同じでなければなりません。
  • GOTO ステートメントが FOR ステートメントで定義されている場合、 label は同じ FOR ステートメントの内側で定義しなければなりません。 ただし、ネストされている FOR ステートメントまたはネストされているコンパウンド・ステートメントは除きます。
  • GOTO ステートメントがコンパウンド・ステートメントで定義されている場合、 label は同じコンパウンド・ステートメントの内側で定義しなければなりません。 ただし、ネストされている FOR ステートメントまたはネストされているコンパウンド・ステートメントは除きます。
  • GOTO ステートメントがハンドラーで定義されている場合、 label は他の有効範囲の規則に従って、同じハンドラーで定義しなければなりません。
  • GOTO ステートメントがハンドラーの外側で定義されている場合、 label をハンドラーの内側で定義してはなりません。
label が、GOTO ステートメントが到達できる有効範囲内で定義されていない場合、 エラーが戻されます (SQLSTATE 42736)。

  • 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