我正在尝试在 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
。但是,当用 'mtd1','sp1' 替换 print_out() 中的 arg1、arg2 时,正确的输出会打印到 test.csv(如下所示)
id | method | ind | location
----------------------------
1a | mtd1 | sp3 | locA
1d | mtd1 | sp3 | locB
如何让retrieve_info() 的arg1、arg2 在print_out() 中正确调用arg1、arg2?
我完全被困住了。不胜感激任何指针,谢谢