我很想在我的 PL/pgSQL 函数中利用 PostgreSQL 的 SQL 输出格式,但我开始觉得我必须放弃这个想法。
我有我的 PL/pgSQL 函数query_result
:
CREATE OR REPLACE FUNCTION query_result(
this_query text
) RETURNS SETOF record AS
$$
BEGIN
RETURN QUERY EXECUTE this_query;
END;
$$ LANGUAGE plpgsql;
..愉快地从输入文本查询中返回SETOF
记录,我可以将其用于动态查询的 SQL 脚本:
mydb=# SELECT * FROM query_result('SELECT ' || :MYVAR || ' FROM Alice') AS t (id int);
id
----
1
2
3
所以我希望找到一种方法,从PL/pgSQL函数内部提供同样格式良好的输出,但不支持类型,并且没有从记录到文本的预定义魔法转换(我知道我可以创建自己的.. )RAISE
SETOF
SETOF
CAST
如果我创建一个虚拟print_result
函数:
CREATE OR REPLACE FUNCTION print_result(
this_query text
) RETURNS void AS
$$
BEGIN
SELECT query_result(this_query);
END;
$$ LANGUAGE plpgsql;
..我无法打印格式化的输出:
mydb=# SELECT print_result('SELECT ' || :MYVAR || ' FROM Alice');
ERROR: set-valued function called in context that cannot accept a set
...
感谢您的任何建议(最好与 PostgreSQL 8.4 一起使用)。