2014-12-15
PostgresSQL覚書 関数の戻り値をレコードに
関数の戻り値というと、普通は1つの値なのだけれど、複数行とってきたいとか、テーブルとしてとってきたいとか思う。
を見ているとできなくないらしいけれど、
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・・・とすると、複数行で返してくれる。
今日はこの辺で終了。