Re: funcion plpgsql

From: Javier Bermúdez Tito <javier_bt(at)hotmail(dot)com>
To: msotocl(at)gmail(dot)com
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: funcion plpgsql
Date: 2007-01-09 21:14:15
Message-ID: BAY129-F97D93508B2C2F08D2025585B30@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Ya lo probe y si me saleeeee solo le agregarias los otros valores variables
suerte cualquier cosa pasas la voz ejecutalo en la forma como te envio ponle
el $body$ donde va y no tendras problemas de dobles comillas y todo eso

CREATE OR REPLACE FUNCTION get_rec(VARCHAR, INTEGER, VARCHAR) RETURNS SETOF
ty_rec AS
$body$
DECLARE
pc_tabla ALIAS FOR $1;
pn_monto ALIAS FOR $2;
pc_campo ALIAS FOR $3;
InstruccionSQL TEXT;
rd_data ty_rec%ROWTYPE;
BEGIN
InstruccionSQL := 'SELECT s.idcsucur, s.saucnosu, s.saucdire FROM '||
pc_tabla ||' s
WHERE s.eliminar = 0 ORDER BY s.saucnosu ASC';

--FOR rd_data IN SELECT s.idcsucur, s.saucnosu, s.saucdire FROM pc_tabla s
WHERE s.eliminar = 0 LOOP
FOR rd_data IN EXECUTE InstruccionSQL LOOP
RETURN NEXT rd_data;
END LOOP;
RETURN;
END;
$body$
LANGUAGE 'plpgsql';

select * from get_rec('sausucur',0,'ss')

>From: "Mario Soto" <msotocl(at)gmail(dot)com>
>To: "Javier Bermúdez Tito" <javier_bt(at)hotmail(dot)com>
>CC: pgsql-es-ayuda(at)postgresql(dot)org
>Subject: Re: [pgsql-es-ayuda] funcion plpgsql
>Date: Tue, 9 Jan 2007 16:59:31 -0400
>
>si el query de la funcion lo hago asi:
>
>for qry in select b.nb_tipo as tipo, a.co_codigo as codigo, a.nb_tipo as
>tp1,
> a.nb_nombre as nombre, a.sq_serialcolumn as seq, a.userid
> from *analogico* a, systab01 b
> where
> a.co_codigo = *158* and
> a.co_codigo = b.sq_serialcolumn and
> b.nb_tipo = *''CATALOGOS''
>* order by a.nb_tipo asc
>loop
>
>funciona, pero yo necesito que los datos que estan en negrillas se los pase
>como parametros de variables, para que asi la funcion me sirva para varias
>tablas.
>
>Gracias
>
>
>2007/1/9, Mario Soto <msotocl(at)gmail(dot)com>:
>>El problema es que la funcion no me esta tomando las variables que le
>>paso como parametros, nombre de ta tabla, indice y otra variable.
>>
>>2007/1/9, Mario Soto <msotocl(at)gmail(dot)com>:
>> > la he reescrito asi:
>> >
>> > CREATE OR REPLACE FUNCTION "public"."get_rec" (varchar, integer,
>> > varchar) RETURNS SETOF RECORD AS
>> > '
>> > DECLARE
>> >
>> > tabla alias for $1;
>> > codigo alias for $2;
>> > tipo alias for $3;
>> > qry RECORD;
>> > query text;
>> > BEGIN
>> > query:= ''select b.nb_tipo as tipo, a.co_codigo as codigo, a.nb_tipo
>>as
>tp1,
>> > a.nb_nombre as nombre, a.sq_serialcolumn as seq, a.userid
>> > from '' || tabla || '' a, systab01 b
>> > where
>> > a.co_codigo = '' || codigo || '' and
>> > a.co_codigo = b.sq_serialcolumn and
>> > b.nb_tipo = '''' || tipo || ''''
>> > order by a.nb_tipo asc'';
>> > for qry in
>> > execute query
>> > loop
>> > return next qry;
>> > end loop;
>> > return;
>> > END;
>> >
>> > ' LANGUAGE 'plpgsql' volatile called on null input security invoker;
>> >
>> >
>> > y la ejecuto asi, pero aun nada.
>> >
>> >
>> > select * from get_rec('public.analogico',158,'CATALOGOS')
>> > AS foo(tipo varchar , seq integer );
>> >
>> >
>> > No sera que la funcion no me esta tomando los parametros ?????
>> >
>> > 2007/1/9, Mario Soto <msotocl(at)gmail(dot)com>:
>> > > aun asi no me funciona
>> > >
>> > > El 9/01/07, Javier Bermúdez Tito<javier_bt(at)hotmail(dot)com> escribió:
>> > > > Me falto ponerle IN
>> > > >
>> > > > FOR rd_data IN SELECT s.idcsucur, s.saucnosu, s.saucdire FROM
>sucursales s
>> > > > WHERE s.eliminar = 0 ORDER BY s.saucnosu ASC LOOP
>> > > > ...
>> > > >
>> > > > pruebalo
>> > > >
>> > > > asi podras obtener todos los datos pruebalo y acondicionalo para tu
>consulta
>> > > > segun tus criterios.
>> > > >
>> > > > CREATE OR REPLACE FUNCTION "public"."get_rec" (VARCHAR, INTEGER,
>VARCHAR)
>> > > > RETURNS SETOF "public"."ty_rec" AS
>> > > > $body$
>> > > > DECLARE
>> > > > rd_data ty_rec%ROWTYPE;
>> > > > BEGIN
>> > > > FOR rd_data SELECT s.idcsucur, s.saucnosu, s.saucdire FROM
>sucursales s
>> > > > WHERE s.eliminar = 0 ORDER BY s.saucnosu ASC LOOP
>> > > > RETURN NEXT rd_data;
>> > > > END LOOP;
>> > > > END;
>> > > > $body$
>> > > > LANGUAGE 'plpgsql';
>> > > >
>> > > > _________________________________________________________________
>> > > > MSN Amor: busca tu ½ naranja http://latam.msn.com/amor/
>> > > >
>> > > >
>> > >
>> >
>>

_________________________________________________________________
Charla con tus amigos en línea mediante MSN Messenger:
http://messenger.latam.msn.com/

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Tincho Carrera 2007-01-09 21:38:11 RE: NO RECIBIR MAS MAILS
Previous Message Mario Soto 2007-01-09 20:59:31 Re: funcion plpgsql