postgres 9.3 で sql を使用して関数内で関数を呼び出そうとしています。
この質問は、私の別の投稿に関連しています。
以下の関数を書きました。これまでのところ、どの種類の出力保存 (COPY) ステートメントも組み込むことができませんでした。そのため、ネストされた関数の出力関数を作成することで、これを回避しようとしています。
CREATE FUNCTION retrieve_info(TEXT, TEXT) RETURNS SETOF
retrieve_info_tbl AS $$
SELECT tblA.id, tblA.method, tblA.species, tblA.location
FROM tblA
WHERE method=$1 AND species=$2
GROUP BY id, method, species
ORDER BY location
$$ LANGUAGE 'sql';
上記の機能が動作します。
ネストされた関数を作成しようとしています。
CREATE FUNCTION print_out(TEXT, TEXT) RETURNS void AS $$
COPY (SELECT * FROM retrieve_info($1, $2)) TO 'myfilepath/test.csv'
WITH CSV HEADER;
$$ LANGUAGE 'sql';
ネストされた関数を呼び出しています。
SELECT * FROM print_out('mtd1','sp1');
出力
上記はこれを与えますERROR: column "$1" does not exist SQL state: 42P02 Context: SQL function "print_out" statement 1
。ただし、print_out() の arg1、arg2 を 'mtd1','sp1' に置き換えると、正しい出力が test.csv に出力されます (以下を参照)。
id | method | ind | location
----------------------------
1a | mtd1 | sp3 | locA
1d | mtd1 | sp3 | locB
arg1、arg2 を print_out() 内で適切に呼び出すには、retrieve_info() の arg1、arg2 を取得するにはどうすればよいですか?
私は完全に立ち往生しています。ポインタをいただければ幸いです、ありがとう