1

一部の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((select CHILD_OID from BTREENODES_NODEHIERARCHY),parents)

複数のレコードを返し、機能しません。何か案は?ありがとう!

4

1 に答える 1

2

PostgreSQLでは、joinedリレーションの値をjoiningの2番目のリレーションのパラメーターとして使用することはできません。9.3ではLATERALサブセレクトで利用できるようになります。創刊号です。2番目の問題-副選択は1行のみを返すことができます

(select CHILD_OID from BTREENODES_NODEHIERARCHY)

おそらく複数の行を返します

9.3まで待つ必要はありません。再帰データを処理する代わりにCTE(共通テーブル式)を使用してください。

于 2012-12-10T11:22:30.187 に答える