Re: Procedimiento almacenado

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-----

In response to

Browse pgsql-es-ayuda by date

  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