LEAVE ステートメント

LEAVE ステートメントは、プログラム制御をループまたはコンパウンド・ステートメントの外側に移動させます。

呼び出し

このステートメントは、以下の対象に組み込むことができます。
  • SQL プロシージャー定義
  • コンパウンド SQL (コンパイル済み) ステートメント
  • コンパウンド SQL (インライン) ステートメント
コンパウンド・ステートメントは、SQL プロシージャー定義、SQL 関数定義、または SQL トリガー定義に組み込むことができます。 このステートメントは実行可能ステートメントではなく、動的に準備することはできません。

許可

必要ありません。

構文

Read syntax diagramSkip visual syntax diagramLEAVElabel

説明

label
終了するコンパウンド、FOR、LOOP、REPEAT、または WHILE ステートメントのラベルを指定します。

  • LEAVE ステートメントがコンパウンド・ステートメントの外側に制御を移動すると、 そのコンパウンド・ステートメント内のすべてのオープン・カーソル (結果セットを戻すのに使用されているカーソルを除く) がクローズされます。

以下の例には、カーソル c1 のデータを取り出すループが含まれています。 SQL 変数 at_end の値がゼロでなければ、 LEAVE ステートメントは制御をループの外側に移動させます。

   CREATE PROCEDURE LEAVE_LOOP(OUT counter INTEGER)
     LANGUAGE SQL
     BEGIN
       DECLARE v_counter INTEGER;
       DECLARE v_firstnme VARCHAR(12);
       DECLARE v_midinit CHAR(1);
       DECLARE v_lastname VARCHAR(15);
       DECLARE at_end SMALLINT DEFAULT 0;
       DECLARE not_found CONDITION FOR SQLSTATE '02000';
       DECLARE c1 CURSOR FOR
         SELECT firstnme, midinit, lastname
           FROM employee;
       DECLARE CONTINUE HANDLER for not_found
         SET at_end = 1;
       SET v_counter = 0;
       OPEN c1;
       fetch_loop:
       LOOP
         FETCH c1 INTO v_firstnme, v_midinit, v_lastname;
         IF at_end <> 0 THEN LEAVE fetch_loop;
         END IF;
         SET v_counter = v_counter + 1;
       END LOOP fetch_loop;
       SET counter = v_counter;
       CLOSE c1;
     END