繁体   English   中英

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

[英]How to pass a with query as a parameter to a PL/pgSQL function?

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

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

返回错误:w不存在。

查询中的w是派生表(由CTE生成的“公用表”)的名称。 这是一种特殊的临时表,仅在CTE附加到的DML命令中可见-与常规表(全局可见)或临时表(在同一会话中可见)不同, 在系统目录没有 w 条目 您也不能为其创建索引或以任何方式对其进行修改。

函数F具有text参数。 您将函数定义保密,但是它可能在内部运行EXECUTE运行动态SQL。 wEXECUTE内部不可见,因此无法执行此操作。

而是创建一个临时表

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM