gpt4 book ai didi

postgresql - 在 PostgreSQL 中引用存储过程的参数

转载 作者:行者123 更新时间:2023-11-29 13:05:33 24 4
gpt4 key购买 nike

我正在转换一些 SQLServer 存储过程,但遇到一个我无法解决的问题。这是 SQLServer 函数:

CREATE FUNCTION [dbo].[getViewNodeHierarchyAux](@pivot varchar(255), @parents varchar(max))
RETURNS @view TABLE (PARENT_OID varchar(255), CHILD_OID varchar(255))
...
insert into @view select F.* from BTREENODES_NODEHIERARCHY T cross apply [dbo].getViewNodeHierarchyAux(T.CHILD_OID,@parents) F where T.PARENT_OID=@pivot;

这就是我在 PostgreSQL 中想到的转换:

CREATE OR REPLACE FUNCTION getviewnodehierarchyauxprueba(IN pivot character varying, IN parents character varying)
...
RETURNS TABLE(test_parent_oid character varying, test_child_oid character varying)
return query (select F.* from BTREENODES_NODEHIERARCHY T cross join getviewnodehierarchyprueba(T.CHILD_OID,parents) F WHERE T.PARENT_OID=pivot);

PgAdmin 告诉我“from”子句中没有对表“t”的有效引用。如果我这样写getviewnodehierarchyprueba((从 BTREENODES_NODEHIERARCHY 中选择 CHILD_OID), parent )

它返回一条以上的记录,但不起作用。有任何想法吗?谢谢你!

最佳答案

PostgreSQL 不允许使用连接关系的值作为连接中第二个关系的参数。它将在 9.3 中通过 LATERAL subselect 提供。这是第一个问题。第二个问题——subselect 只能返回一行

(select CHILD_OID from BTREENODES_NODEHIERARCHY)

可能返回不止一行

您无需等到 9.3 - 使用 CTE(公用表表达式)代替处理一些递归数据。

关于postgresql - 在 PostgreSQL 中引用存储过程的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13799474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com