2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ストアドで複数レコードを返却する

Last updated at Posted at 2020-10-16

はじめに

業務の中で、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を呼ぶとその列を戻り値として返却することができる。実際にはループの中でデータを加工するなどの処理を行い、その結果をレコードとして返却できるため、非常便利です。

参考文献

PostgreSQLのPL/pgSQLで複数行の戻り値を返す

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?