RV: Regresando tabla

From: "Miguel Angel" <mvillagomez(at)sayab(dot)com(dot)mx>
To: "'Espartano'" <espartano(dot)mail(at)gmail(dot)com>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RV: Regresando tabla
Date: 2006-03-08 16:58:36
Message-ID: 20060308170041.DFE419DCA1C@postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


Muchisimas gracias por el tip que me has dado, de hecho tuve que hacer una
nueva función en la que necesitaba precisamente esa característica. Aunque
no salío a la primera, con las instrucciones que me has dado salío a la
perfección.

Así quedo la función que originalmente esta haciendo, con las modificaciones
por si alguien le sirve, como ejemplo:

CREATE OR REPLACE FUNCTION prueba(integer) RETURNS SETOF RECORD AS $$
DECLARE
registro RECORD;
BEGIN
FOR registro IN (SELECT * FROM (SELECT
(SUBSTRING(clave,1,(LENGTH(clave)-1)))::integer AS clave, tipo FROM
tabla2)AS Uno WHERE clave=$1) LOOP
RETURN NEXT registro;
END LOOP;
RETURN;
END;
$$ LANGUAGE PLPGSQL;

SELECT * FROM prueba(1017) as (clave integer, tipo varchar);

-----Mensaje original-----
De: pgsql-es-ayuda-owner(at)postgresql(dot)org
[mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Espartano
Enviado el: Martes, 07 de Marzo de 2006 09:39 p.m.
Para: Javier Bermúdez Tito
CC: mvillagomez(at)sayab(dot)com(dot)mx; pgsql-es-ayuda(at)postgresql(dot)org
Asunto: Re: [pgsql-es-ayuda] Regresando tabla

> >Bueno ya he encontrado el fallo, después de leer todo lo que encontré de
> >RETURN NEXT. El problema era la forma en como llamo a la función ya que
esta
> >me esta regresando una tabla debo leerla:

Te paso un tip, en ocaciones puede que tengas que regresar algunos
datos y no tienes una tabla para hacer %ROWTYPE, en ese caso tienes
que regresar un tipo de dato RECORD que es como una tabla que se
amolda a tus necesitades con el detalle de que tienes que resivir la
funcion como una tabla como lo has expresado:

> >SELECT * FROM prueba();

y aparte tienes que espesificar los valores de la "tabla" de retorno
si no mal recuerdo asi:

SELECT * FROM prueba() as (valor_1 integer, valor_2 text, valor_3
float ........)

Todo esto te lo digo porque cuando recien hise funciones de ese tipo
no saba que tenia que especificar los valores de retorno y eso me
retraso un poco ;)

---------------------------(fin del mensaje)---------------------------
TIP 4: No hagas 'kill -9' a postmaster

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message daly santana sanchez 2006-03-08 18:50:07 Cursores Anidados
Previous Message Miguel Angel 2006-03-08 16:57:38 RE: Regresando tabla