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: | RE: Regresando tabla |
Date: | 2006-03-08 16:57:38 |
Message-ID: | 20060308165900.A30729DC84E@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
From | Date | Subject | |
---|---|---|---|
Next Message | Miguel Angel | 2006-03-08 16:58:36 | RV: Regresando tabla |
Previous Message | Miguel | 2006-03-08 16:30:10 | cambiar encoding |