From: | Petru Ghita <petrutz(at)venaver(dot)info> |
---|---|
To: | "Ing (dot) Marcos Luís Ortíz Valmaseda" <mlortiz(at)uci(dot)cu> |
Cc: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Procedimiento almacenado |
Date: | 2010-03-06 02:47:27 |
Message-ID: | 4B91C23F.3070505@venaver.info |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Si necesitas que la función te devuelva varias filas de una tabla
podrias usar algo como:
CREATE OR REPLACE FUNCTION sp_tipoauto() RETURNS TABLE(
id_auto integer,
...
tipoauto text
) AS $$
SELECT * from tbl_04;
$$ LANGUAGE SQL STABLE;
Ojo que la función es STABLE y no VOLATILE porque no modificas nada en
ninguna tabla. Echa un vistazo a esto:
http://www.postgresql.org/docs/current/static/sql-createfunction.html
Si lo que necesitas es una fila de una tabla cuya estructura has
definido y conoces puedes usar /name/ /table_name/%ROWTYPE; como tipo
de retorno de la función. Pero como parece que sólo te hace falta un
valor:
CREATE OR REPLACE FUNCTION sp_tipoauto(integer) RETURNS text AS $$(
DECLARE
result TEXT;
SELECT campo3 into result from tbl_04 where id_auto=$1;
return result;
$$ LANGUAGE plpgsql STABLE;
Mira tb estos links:
http://www.postgresql.org/docs/8.4/static/plpgsql-declarations.html
http://www.postgresql.org/docs/8.4/static/plpgsql-statements.html#PLPGSQL-SELECT-INTO
Un saludo.
Petru Ghita
Ing . Marcos Luís Ortíz Valmaseda wrote:
> Desarrollo Escuintla escribió:
>> Hola lista,
>>
>> tengo el siguiente SP, el cual me devuelve multiples filas de una
>> tabla:
>>
>> CREATE OR REPLACE FUNCTION sp_tipoauto() RETURNS SETOF tbl_04 AS
>> $BODY$ DECLARE sql_result tbl_04; BEGIN FOR sql_result in EXECUTE
>> 'SELECT * from tbl_04' LOOP RETURN NEXT sql_result; END LOOP;
>> END; $BODY$ LANGUAGE 'plpgsql' VOLATILE COST 100 ROWS 1000; ALTER
>> FUNCTION sp_tipoauto() OWNER TO postgres;
>>
>>
>> pero lo he agredado otro para que solo me devuelva el valor de
>> una columna, cambiando la linea:
>>
>> FOR sql_result in EXECUTE 'SELECT campo3 from tbl_04' LOOP
>>
>> pero al ejecutarlo me da un error, donde me dice que no sabe que
>> tipo de valor es el campo,
>>
>> ¿Como solucionar esto?
>>
>>
>> -- Saludos
>>
>> _________________ José de Paz Escuintla, Guatemala Tel.
>> (502)-56041676
>>
>> http://desarrolloescuintla.wordpress.com
>>
> Bueno y de qué tipo es campo3? En caso de que necesites, puedes
> castear el valor en depedencia de su tipo. Ejemplo: FOR sql_result
> in EXECUTE 'SELECT campo3::text from tbl_04' LOOP
>
> Saludos
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
iEYEARECAAYFAkuRwj4ACgkQt6IL6XzynQQqfwCg0V2C6W/evQL0PwE56utJn64G
KAkAnRWfAr2c1kSgcDdqGVbl6c0/8SxB
=nkDD
-----END PGP SIGNATURE-----
From | Date | Subject | |
---|---|---|---|
Next Message | Ing . Marcos Luís Ortíz Valmaseda | 2010-03-06 03:07:47 | Re: Procedimiento almacenado |
Previous Message | Desarrollo Escuintla | 2010-03-06 00:35:46 | Procedimiento almacenado |