如何将查询作为参数传递给PL / pgSQL函数?

时间:2014-10-24 01:39:35

标签: sql postgresql plpgsql

F(aTable TEXT)是一个PL / pgSQL函数,它使用表作为参数。当我这样调用这个函数时:

with w as ( ... ) select * from F('w')

它返回错误:w不存在。

1 个答案:

答案 0 :(得分:1)

查询中的

w是派生表的名称(&#34;公用表&#34;从CTE生成)。这是一种特殊的临时表,仅在CTE附加的DML命令中可见 - 与常规表(全局可见)或临时表(在同一会话中可见)不同,系统目录中有没有条目< / strong> for w。您也不能为它创建索引或以任何方式修改它。

函数F采用text参数。您保留了函数定义的秘密,但它可能在内部使用EXECUTE运行动态SQL。 <{1}}在w内不可见,因此无法做到这一点。

改为创建临时表

或者更好的是,整合整个查询,包括函数中的代码。这通常是最快的。