Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

Next:From: Silvio QuadriDate: 2010-06-24 17:36:25
Subject: Re: [pgsql-es-ayuda] Re: [pgsql-es-ayuda] Creación !#¼óŸu‘”¥
Previous:From: Alvaro HerreraDate: 2010-06-24 17:28:03
Subject: Re: Creación de id

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group