我尝试将动态查询结果转换为json
,然后返回该json
作为此函数的结果(这是简化版本,实际代码中的WHERE
子句相当长)。
CREATE OR REPLACE FUNCTION get_data_as_json(tbl regclass, p_version_id integer)
RETURNS json AS $$
BEGIN
RETURN to_json( EXECUTE 'SELECT * FROM '|| tbl
|| ' WHERE version_id = p_budget_version_id' );
END;
$$ LANGUAGE plpgsql;
字符串
但是,此代码会导致type "execute" does not exist
错误。
如何运行动态查询,然后将结果转换为JSON?
2条答案
按热度按时间jtoj6r0c1#
如果你返回
SETOF
,你需要使用RETURN QUERY EXECUTE
结构,产生一个动态查询,返回你想要的。未经考验,但在模糊的正确方向:
字符串
wa7juj8i2#
什么Craig写的.但有一些不同的解决方案与额外的修复:
字符串
最简单的是使用**
OUT
参数。您可以直接SELECT INTO
并完成。对象标识符类型
regclass
在输出为text
(自动)时自动(如果需要)被引用。为此,请将%s
**与format()
一起使用,而不是%I
。我认为到目前为止,参数
p_version_id
被忽略了。我怀疑原始代码中的错别字(“p_budget_version_id”)与无效的语法相结合。我建议使用EXECUTE
的USING
结构。请参阅: