Re: Error en Funcion Recursiva

From: Emanuel Calvo Franco <postgres(dot)arg(at)gmail(dot)com>
To: Dianna Florencia Romero Berrospi <diannys_1282(at)hotmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Error en Funcion Recursiva
Date: 2010-06-24 17:35:33
Message-ID: AANLkTiku_zNVBNMGUm8WgTG4C94ljc8rLge9KbEqZs4z@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

2010/6/24 Dianna Florencia Romero Berrospi <diannys_1282(at)hotmail(dot)com>:
> Hola gentita, yo de nuevo, tengo la siguiente función, a pesar de lo que
> revisar n veces no encuentro el error, cuando ejecuto la siguiente función
> me da como resultado "unnamed portal", por favor alguien puede decirme que
> esta mal, gracias.
> Ah!!! y   Gracias a Emmanuel Calvo, por responder a mi anterior pregunta.
>
>
> Create or Replace function spPruebaPrueba
> (
> docu varchar
> )
> Returns SetOf RefCursor As
> $Body$
> Declare Lista RefCursor;
> Begin
> Open Lista For
> With Recursive
> Referencia (DocId, DocEnc, RefDoc, RefEnc) As
> (
> Select T0.DocId,
> T1.DocEnc,
> T0.ReFDoc,
> T2.DocEnc
> From DocumentoReferencia T0
> Inner Join Documento T1 On (T0.DocId = T1.DocId)
> Inner Join Documento T2 On (T0.RefDoc = T2.DocId)
> Where T0.RefDoc ilike 'E-02993'
> Union All
> Select T0.DocId,
> T2.DocEnc,
> T0.RefDoc,
> T3.DocEnc
> From DocumentoReferencia T0
> Inner Join Referencia T1 On (T0.RefDoc  = T1.docid)
> Inner Join Documento  T2 On (T0.DocId  = T2.DocId)
> Inner Join Documento  T3 On (T0.RefDoc = T3.DocId)
> )
> Select DocId, DocEnc, RefDoc, RefEnc from referencia;
> Return Next Lista;
> Return;
> End;
> $Body$
> LANGUAGE 'plpgsql' VOLATILE;

Estas retornando un set de refcursor? Creo que no es lo que quieres
(según lo que estoy
observando de la función). refcursor es una referencia a un cursor.

Para que querés recorrer la consulta con un for? Para eso directamente
(si aún quieres
encapsularlo en una función), incrusta el SQL en una función LANGUAGE
'sql' y llámalo:

SELECT * FROM spPruebaPrueba('valor');

Lo que si, tendrás que crear una vista o un tipo para el dato que
retorna (y utilizar RETURNS
SETOF prueba_return):

CREATE VIEW prueba_return AS Select DocId, DocEnc, RefDoc, RefEnc from
referencia;

Saludos

--
Emanuel Calvo Franco
www.emanuelcalvofranco.com.ar
Join: http://www.thevenusproject.com/

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Silvio Quadri 2010-06-24 17:36:25 Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Creación de id
Previous Message Alvaro Herrera 2010-06-24 17:28:03 Re: Creación de id