03/03/24 15:05 Z0MnyWwn
PL/PGSQL で Perl の join 関数みたいなストアドを作りたいんだけど、
なんかもっとスマートな方法無いでしょうか?
結果レコードのカラム名を変数で指定できると嬉しいんだけど、
Postgres 7.2.1 では変数展開してくれませんでした。
-- SQL の結果レコードに指定した文字列を挟んで連結して返す
-- 引数1: 実行する SQL 文
-- 引数2: 挟み込む文字列
DROP FUNCTION join_str(TEXT, TEXT);
CREATE FUNCTION join_str(TEXT, TEXT) RETURNS TEXT AS '
declare
delimiter alias for $1;
sql alias for $2;
str text;
rec record;
is_first bool;
begin
is_first = true;
str := '''';
FOR rec IN EXECUTE sql LOOP
IF is_first THEN
str := rec.serialnum; -- カラム名を指定
is_first := false;
ELSE
str := str || delimiter || rec.serialnum; -- カラム名を指定
END IF;
END LOOP;
return str;
end;
' LANGUAGE 'plpgsql';