Postgresqlで関数を書く方法を学んでいます。_tmp_myfunction()
を取り込んでテーブルを返すという関数を定義しましたid
( というテーブル オブジェクト タイプも定義しています_tmp_mytable
) 。
-- create object type to be returned
CREATE TYPE _tmp_mytable AS (
id integer,
cost double precision
);
-- create function which returns query
CREATE OR REPLACE FUNCTION _tmp_myfunction(
id integer
)
RETURNS SETOF _tmp_mytable AS $$
BEGIN
RETURN QUERY
SELECT
sales.gid,
cost
FROM
sales
WHERE
id = sales.gid;
END;
$$ LANGUAGE plpgsql;
これを使用id
して、次のアプローチを使用して呼び出すと、これは正常に機能します。
SELECT * FROM _tmp_myfunction(402);
私ができるようにしたいのは、それを呼び出すことですが、1つの値だけではなく、値の列を使用することです. ただし、次のアプローチを使用すると、テーブルのすべての値がカンマで区切られた 1 つの列になります。
-- call function using all values in a column
SELECT _tmp_myfunction(t.id)
FROM transactions as t;
SELECT _tmp_myfunction(402);
の代わりに使用しても同じ結果が得られることは理解していSELECT * FROM _tmp_myfunction(402);
ますが、値の列を渡すときに複合値を取得しないように関数を構築する方法がわかりません。