Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将with查询作为参数传递给PL/pgSQL函数?_Sql_Postgresql_Plpgsql - Fatal编程技术网

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

如何将with查询作为参数传递给PL/pgSQL函数?,sql,postgresql,plpgsql,Sql,Postgresql,Plpgsql,F(aTable TEXT)是一个PL/pgSQL函数,它使用表作为参数。当我这样调用此函数时: 带w作为( ... ) 从F('w')中选择* 它返回一个错误:w不存在 查询中的w是派生表的名称(从中生成的“公共表”)。这是一种特殊的临时表,仅在CTE附加到的DML命令中可见-与常规表(全局可见)或临时表(在同一会话中可见)不同,系统目录中没有项w。您也不能为它创建索引或以任何方式修改它 函数F采用text参数。您对函数定义保密,但它可能在内部运行动态SQLw在EXECUTE中不可见,因此无

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

带w作为(
...
)
从F('w')中选择*


它返回一个错误:w不存在

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

函数
F
采用
text
参数。您对函数定义保密,但它可能在内部运行动态SQL<代码>w在
EXECUTE
中不可见,因此无法执行此操作

改为创建一个临时表


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

非常感谢!我学会了。最后,我使用
w
中的所有代码作为参数。我无法包含函数中的代码,因为函数将在许多地方使用。