LoginSignup
0
0

More than 1 year has passed since last update.

PostgreSQL Functionで複数の戻り値を得る

Posted at

最近functionを初めて作った事があって書き方を整理してみました。

CREATE OR REPLACE FUNCTION f_getsomething(in_ymd date)
RETURNS TABLE (a numeric
			   , b integer
			   , c integer)
AS $$
-- 戻り値:a(コメント)、b(コメント)、c(コメント)
DECLARE
one_rec         RECORD;

cur_data cursor(in_ymd date) is

    -- ~SQL文~
    ;    

BEGIN
	FOR one_rec IN cur_data($1) -- C#のforeachみたいにcur_dataから1行ごどに出して処理する
	LOOP                        -- LOOPからEND LOOP内の内容を繰り返す
            IF NOT FOUND then   -- もしcur_dataに何も入ってない場合のデフォルト値
                a := 0;
                b := 0;
                c := 0;
            ELSE
                a := one_rec.a;  -- 3つのデータを上で宣言した変数に入れる
                b := one_rec.b;
                c := one_rec.c;
            END IF;
		RETURN NEXT;             -- 結果集合(塊)に1行を追加する、LOOPが進めて行くと共に結果集合に行が増える
	END LOOP;    
	RETURN;                      -- 結果集合を戻り値で返す
END;
$$ LANGUAGE plpgsql;

functionを使用して処理をプログラム側とデータベース側で分ける事ができ、選択地は増えました。
だが逆にどこまでプログラム側で処理して、どこまでDB側でやるかを決めるのが難しいです。
function処理はデバックで追いかけるのができない?と聞いてるのでC#みたいにエラーの原因探りも難しいそうです。
経験を積むしかないのかと思います。
参考:https://qiita.com/ester41/items/3401606322888a0a7f21
   https://eatsmart.hatenablog.com/entry/2019/03/01/155838

0
0
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
0
0