| 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: | Whole Thread | Raw Message | 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/
| 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 |