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 SYAIN;
syain_rec RECORD;
BEGIN
OPEN cur1;
LOOP
FETCH cur1 INTO syain_rec;
EXIT WHEN NOT FOUND;
RAISE INFO '%', syain_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(5)[];
str1 VARCHAR(5);
BEGIN
c1[0] := '赤';
c1[1] := '黄';
c1[2] := '青';
FOREACH str1 IN ARRAY c1
LOOP
RAISE INFO '%',str1; -- 赤,黄,青が出力される
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回も行われません。
関連の記事