RE: plpsql con resultado de consulta

From: Ramón Alberto Bruening González <albertobruening(at)hotmail(dot)com>
To: Henry <hensa22(at)yahoo(dot)es>, Miguel Rodríguez Penabad <penabad(at)gmail(dot)com>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: plpsql con resultado de consulta
Date: 2007-09-15 23:30:58
Message-ID: BLU106-W156C8AD17A6B701268EFFAA2BD0@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda


Gracias por la sugerencia, lo voy a probar. Y contestando a tu preg para que necesito, es la siguiente, la quiero utilizar en mis reportes, para ordenar el mismo de una otra forma, de acuerdo a la seleccion del usuario, pero los campos van a ser siempre los mismos, estoy utilizando FastReport, gracias por la ayuda.> Date: Sat, 15 Sep 2007 22:21:51 +0200> From: hensa22(at)yahoo(dot)es> Subject: Re: [pgsql-es-ayuda] plpsql con resultado de consulta> To: penabad(at)gmail(dot)com; albertobruening(at)hotmail(dot)com> CC: pgsql-es-ayuda(at)postgresql(dot)org> > > > --- Miguel Rodríguez Penabad <penabad(at)gmail(dot)com>> escribió:> > > El 14/09/07, Ramón Alberto Bruening González> > <albertobruening(at)hotmail(dot)com> escribió:> > >> > > Buenas tardes listeros:> > >> > > Como puedo hacer que una funcion en plpsql me> > devuelve un resultado con la> > > clausula select * from mi_tabla, porque> > actualmente inserto dicha sentencia> > > sql y el resultado me dice que no tiene ningun> > destino.> > >> > > Quiero realizar mi consulta de esa manera para> > crear consultas dinamicas> > > que se ejecuten de acuerdo a una condicion que voy> > a insertar por ej:> > >> > > If accion = 1 then> > > Select * from mi_tabla_1;> > > else> > > if accion = 2 then> > > select * from mi_tabla_2;> > > end if;> > > end if;> > >> > > desde ya muchas gracias.> > > > No sé, yo dudo de la utilidad de una función de ese> > estilo, pero te> > paso un script que> > funciona y te comento lo más "gordo" que encontré:> > > > -- Primero creo dos tablas de prueba y meto datos.> > create table ta(a1 int, a2 text);> > create table tb(b1 date, b2 numeric);> > insert into ta values(1,'uno'),(2,'dos');> > insert into tb values(now()::date,50),> > ('12/07/2000',60);> > > > -- Ahora creo la función. Al ser en PL/pgSQL no se> > puede "devolver"> > -- directamente un Select * from tabla, hay que> > hacer un bucle sobre> > -- el select y hacer uso del "return next". Creo que> > esto cambiará en> > -- futuras versiones.> > -- Además, dado que puedes hacer selects distintos> > dependiendo> > -- de la opción elegida, la función devolverá algo> > "setof record",> > -- sin especificar qué tipo de registro.> > > > create function funcion(opcion text)> > returns setof record> > as> > $funcion$> > declare> > registro record;> > begin> > if opcion='uno' then> > for registro in select * from ta loop> > return next registro;> > end loop;> > return;> > elseif opcion='dos' then> > for registro in select * from tb loop> > return next registro;> > end loop;> > return;> > end if;> > end> > $funcion$> > language plpgsql;> > > > > > -- Probamos las funciones. Dado que la función> > devuelve "setof record"> > -- hay que indicar el esquema en la llamada a la> > función, como los ejemplo> > -- siguientes.> > select * from funcion('uno') as (a1 int, a2 text);> > select * from funcion('dos') as (b1 date, b2> > numeric);> > > > No sé si era esto lo que pretendías...> > > > Saludos> > -- > > aqui te mando otra alternativa.> puedes realizarlo de esta forma :> > primero creas tu funcion :> > CREATE OR REPLACE FUNCTION algunafunction(g refcursor)> RETURNS integer AS> $BODY$> declare> begin> > open g for select * from algunatabla;> return 1;> > exception> when others then> return -1;> END;> > > ahora para traer los registros puedes realizarlo de la> siguiente manera.> > comienzas una transaccion, ya que es la unica manera> que funcione:> > begin;> select algunafunction('d');> fetch all in d; --en este momento se muestran los> datos> > commit; --despues de mandar el commit, los datos son> --limpiados,sugiero no poner esta sentencia, sino> --ejecutar las 3 primeras y despues ejecutar esta.> > yo uso esta forma para usar estos tipos de funciones> en las app de escritorio, y funcionan muy bien.> este ejemplo lo encontre en el manual de postgresql.> > espero esto te ayude.> > Saludos> > > > > > > > ______________________________________________ > Sé un Mejor Viajero > ¿Quieres saber cómo? ¡Deja que otras personas te ayuden!> http://advision.webevents.yahoo.com/reto/viaje.html
_________________________________________________________________
Invite your mail contacts to join your friends list with Windows Live Spaces. It's easy!
http://spaces.live.com/spacesapi.aspx?wx_action=create&wx_url=/friends.aspx&mkt=en-us

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Ramón Alberto Bruening González 2007-09-16 00:02:37 Ordenacion de Filas
Previous Message Gabriel Hermes Colina Zambra 2007-09-15 22:55:12 Re: Nuevos videos del PostgreSQL Day 2007 - Perú