はじめに
業務の中で、DBからテーブルに1時間毎に入っているレコードを10分刻みにして、結果を取得する処理を作成する機会があったので、誰かの参考になればと思います。
環境
・postgresql 9.6
・Windows 10
PL/pgSQL
今回はpostgresqlなので、PL/pgSQL
で作成します。
CREATE OR REPLACE FUNCTION test_function()
RETURNS TABLE(
id bigint,
name varchar(20),
age smallint
) AS $$
DECLARE
-- カーソル
cur cursor for SELECT * FROM user;
BEGIN
FOR cur_rec IN cur
LOOP
id := cur_user.food_id;
name := rec_user.food_name;
age := rec_user.food_name;
RETURN NEXT;
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql;
解説
RETURNS TABLE
上記を定義することで、テーブル構造の戻り値を指定することができる。
RETURN NEXT
RETURNS TABLEで宣言した変数にカーソルで取得した値を代入して、RETURN NEXT
を呼ぶとその列を戻り値として返却することができる。実際にはループの中でデータを加工するなどの処理を行い、その結果をレコードとして返却できるため、非常便利です。