関数の戻り値というと、普通は1つの値なのだけれど、複数行とってきたいとか、テーブルとしてとってきたいとか思う。
問い合わせ言語(SQL)関数
を見ているとできなくないらしいけれど、
CREATE FUNCTION sum_n_product_with_tab (x int)
RETURNS TABLE(sum int, product int) AS $$
SELECT $1 + tab.y, $1 * tab.y FROM tab;
$$ LANGUAGE SQL;
で、LANGUAGEが「SQL」となっていて、「plpgsql」で作っているものだとRETURNSの後ろをTABLE(ほにゃほにゃ)に変えただけではうまくいかなかった。
戻り値が
sum | product
—–+——————
50 | aaa
66 | bbb
とかになってほしいんだけど、
sum_n_product_with_tab
———————–
( 50, aaa)
( 66, bbb)
になってしまって、せっかくTABLEにしている意味ないんじゃない?ということになった。
ふむ。どうすればよいのじゃ・・・
ということで、せめて複数行とってくることにしよう。
CREATE OR REPLACE FUNCTION hoge(parm_cd character varying)
RETURNS numeric AS
$BODY$
DECLARE
・・・・
BEGIN
CREATE TEMP TABLE wk_master(code numeric(2,0))
・・・・
RETURN QUERY SELECT code FROM wk_master;
DROP TABLE wk_master;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
RETURN QUERY・・・とすると、複数行で返してくれる。
今日はこの辺で終了。