SQL PL 繰り返し
DB2のSQLプロシージャ言語(SQL PL)での繰り返し文について説明します。
SQL PLでの繰り返しは、FOR文、LOOP文、WHILE文があります。
それぞれ順番に説明します。
FOR文
FOR文について説明します。
構文は以下の通りです。
わかりやすくする為詳細なオプションは省略しております。詳しくは公式HPを参照ください。
FOR文では、SELECT文で抽出したレコード数分ループが実行されます。
【文法】
FOR ループ名 AS SELECT文DO
繰り返しする文。
END FOR;
【例】
CREATE OR REPLACE PROCEDURE SP_PRINT_EMP() LANGUAGE SQL BEGIN FOR vl AS SELECT EMP_NO, EMP_NAME FROM MST_EMP DO CALL DBMS_OUTPUT.PUT_LINE(EMP_NO || ':' || EMP_NAME); END FOR; END /
WHILE文
WHILE文について説明します。
WHILE文では、繰り返し条件を満たす間繰り返が実行されます。
構文は以下の通りです。
わかりやすくする為詳細なオプションは省略しております。詳しくは公式HPを参照ください。
【文法】
WHILE 繰り返し条件 DO繰り返しする文。
END WHILE;
【例】
CREATE OR REPLACE PROCEDURE SP_WHILE_SMPL(IN IN_MAX INTEGER) LANGUAGE SQL BEGIN DECLARE IN_CNT INTEGER; SET IN_CNT = 1; WHILE IN_CNT <= IN_MAX DO CALL DBMS_OUTPUT.PUT_LINE('IN_CNT = ' || IN_CNT); SET IN_CNT = IN_CNT + 1; END WHILE; END /
LOOP文
LOOP文について説明します。
LOOP文では、無限に繰り返しが実行されます。
繰り返しを終了する際は、LEAVE文などを使用します。
構文は以下の通りです。
【文法】
LOOP繰り返しする文。
END LOOP;
【例】
CREATE OR REPLACE PROCEDURE SP_LOOP_SMPL(IN IN_MAX INTEGER) LANGUAGE SQL BEGIN DECLARE IN_CNT INTEGER; SET IN_CNT = 1; output_loop: LOOP IF IN_CNT > IN_MAX THEN LEAVE output_loop; END IF; CALL DBMS_OUTPUT.PUT_LINE('IN_CNT = ' || IN_CNT); SET IN_CNT = IN_CNT + 1; END LOOP output_loop; END /