PostgreSQLのPL/pgSQLのループ文のサンプルです。
(確認環境:PostgreSQL 11.2,Windows 10)
目次
サンプル | 条件でループを抜ける(LOOP文) |
select文で取得した件数分ループする | |
決まった回数繰り返す(FOR文) | |
配列の数分繰り返す(FOREACH文) | |
最初に条件の判定をする(WHILE文) |
条件でループを抜ける(LOOP文)
LOOP IF 条件 THEN EXIT; END IF; END LOOP; |
条件でループを抜けるサンプルです。
CREATE OR REPLACE PROCEDURE test1()
AS $$
DECLARE
a int;
BEGIN
a:= 1;
LOOP
IF (a = 3) THEN
EXIT;
END IF;
a := a + 1;
END LOOP;
RAISE INFO 'cnt=%',a; -- cnt=3が出力される
END;
$$
LANGUAGE plpgsql;
7行目のLOOPから12行目のEND LOOPまでループします。
8行目のIF文の条件に合致した場合、9行目のEXITでループ文を抜けます。
select文で取得した件数分ループする
LOOP EXIT WHEN カーソル%NOTFOUND; END LOOP; |
select文で取得した件数分ループするサンプルです。
CREATE OR REPLACE PROCEDURE test1()
AS $$
DECLARE
cur1 CURSOR FOR
select name from employee;
employee_rec RECORD;
BEGIN
OPEN cur1;
LOOP
FETCH cur1 INTO employee_rec;
EXIT WHEN NOT FOUND;
RAISE INFO '%', employee_rec.name;
END LOOP;
CLOSE cur1;
END;
$$
LANGUAGE plpgsql;
10行目は、FETCH文です。取得したデータをカーソルから変数にセットしています。
11行目は、カーソルのデータが存在しない(NOT FOUND)のときEXITでループを抜けます。
決まった回数繰り返す(FOR文)
FOR 変数 IN 数値...数値 LOOP END LOOP; |
決まった回数を繰り返すサンプルです。
CREATE OR REPLACE PROCEDURE test1()
AS $$
DECLARE
num1 int;
BEGIN
num1:= 3;
FOR a IN 1..num1 LOOP
RAISE INFO '%',a; -- 1 2 3が出力される
END LOOP;
END;
$$
LANGUAGE plpgsql;
7行目は、変数aが1,2,3となり、その分繰り返されます。
8行目は、1,2,3が出力されます。
配列の数分繰り返す(FOREACH文)
FOREACH 変数 IN ARRAY 配列名 LOOP 処理 END LOOP; |
配列の数分繰り返すサンプルです。
CREATE OR REPLACE PROCEDURE test1()
AS $$
DECLARE
c1 VARCHAR(6)[];
str1 VARCHAR(6);
BEGIN
c1[0] := 'red';
c1[1] := 'yellow';
c1[2] := 'blue';
FOREACH str1 IN ARRAY c1
LOOP
RAISE INFO '%',str1; -- red,yellow,blueが出力される
END LOOP;
END;
$$
LANGUAGE plpgsql;
11行目は、FOREACH文で配列の最初の要素から最後の要素まで繰り返します。
最初に条件の判定をする(WHILE文)
WHILE 条件 LOOP END LOOP; |
最初に条件を判定するサンプルです。
CREATE OR REPLACE PROCEDURE test1()
AS $$
DECLARE
num1 int;
BEGIN
num1 := 0;
WHILE num1 < 5
LOOP
num1 := num1 + 1;
END LOOP;
RAISE INFO '%',num1; -- 5が出力される
END;
$$
LANGUAGE plpgsql;
8行目は、ループ処理に入る前に条件の判定があります。
最初の判定で、falseの場合は、ループ処理が1回も行われません。
関連の記事