Re: Metodos para hacer select a una tabla

From: Guillermo Villanueva <guillermovil(at)gmail(dot)com>
To: Alejandro Carrillo <fasterzip(at)yahoo(dot)es>
Cc: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>, "alvherre(at)alvh(dot)no-ip(dot)org" <alvherre(at)alvh(dot)no-ip(dot)org>
Subject: Re: Metodos para hacer select a una tabla
Date: 2011-11-17 15:50:51
Message-ID: CANm+PCChX-u6sEkfmuz-v-vT8Sa-A05CvA3BmGFLtKk9q2LN9A@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Simplemente una idea, no se si mejorará la performance pero,
Por que no probás haciendo que la función devuelva un dato tipo tabla?
y luego trabajás con la tabla?
Algo así:

CREATE OR REPLACE FUNCTION accesobd.get_clientesborradofechas(p_idcliente
bigint, p_codcliente character varying, p_nomcliente character varying,
p_edad integer, p_sepso character varying, p_fechanac date, p_fecha_inicial
date, p_fecha_final date, ocursor refcursor)
RETURNS TABLE(
tidcliente tipodato,
tcodcliente tipodato,
tnomcliente tipodato,
tedad tipodato,
tsepso tipodato,
tfechanac tipodato,
tfecha_inicial tipodato,
tfecha_final tipodato
) AS &&
....
....
return query Select idcliente, codcliente, nomcliente, edad, sepso,
fechanac, fecha_inicial, fecha_final
from public.clientesborradofechas
WHERE ....;
....
....

Luego la llamás con
select * from accesobd.get_clientesborradofechas(...

Guillermo Villanueva

El 17 de noviembre de 2011 11:47, Alejandro Carrillo
<fasterzip(at)yahoo(dot)es>escribió:

> Buenos dias,
>
> Conocen algunos metodos para hacer un function, donde se haga un select a
> una tabla, y pueden venir campos nulos en los parámetros del procedimiento,
> de tal forma que esto signifique que pueden venir uno o varios campos a
> consultar (pero la function debe devolver los valores de una forma rápida
> ante millones de registros). Yo he desarrollado esta solución:
>
> CREATE OR REPLACE FUNCTION accesobd.get_clientesborradofechas(p_idcliente
> bigint, p_codcliente character varying, p_nomcliente character varying,
> p_edad integer, p_sepso character varying, p_fechanac date, p_fecha_inicial
> date, p_fecha_final date, ocursor refcursor)
> RETURNS void AS
> $BODY$
> -- Uso de esta función: SELECT public.get_clientes(p1, p2, ... , pn,'cur')
> ; fetch all in cur;
> BEGIN
> if p_idcliente!= null then
> OPEN oCursor FOR Select
> idcliente, codcliente, nomcliente, edad, sepso, fechanac,
> fecha_inicial, fecha_final
> from
> public.clientesborradofechas
> WHERE idcliente = p_idcliente;
> else
> OPEN oCursor FOR Select
> idcliente, codcliente, nomcliente, edad, sepso, fechanac,
> fecha_inicial, fecha_final
> from
> public.clientesborradofechas
> WHERE coalesce(idcliente,'0') =
> coalesce(p_idcliente,coalesce(idcliente,'0'))
> and coalesce(codcliente,'') like coalesce('%'||p_codcliente||'%','%%')
> and coalesce(nomcliente,'') like coalesce('%'||p_nomcliente||'%','%%')
> and coalesce(edad,'0') = coalesce(p_edad,coalesce(edad,'0'))
> and coalesce(sepso,'') like coalesce('%'||p_sepso||'%','%%')
> and coalesce(fechanac,now()) =
> coalesce(p_fechanac,coalesce(fechanac,now()))
> and coalesce(fecha_inicial,now()) =
> coalesce(p_fecha_inicial,coalesce(fecha_inicial,now()))
> and coalesce(fecha_final,now()) =
> coalesce(p_fecha_final,coalesce(fecha_final,now()))
> ;
> end if;
> END;
> $BODY$
> LANGUAGE plpgsql VOLATILE
> COST 100;
>
> Agradezco su ayuda con el tema ya que una funcion similar, al parecer,
> esta poniendo muy lento a un reporte.
>

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Guillermo Villanueva 2011-11-17 15:58:10 Re: [pgsql-es-ayuda] optimización de busqueda por like
Previous Message Alejandro Carrillo 2011-11-17 14:47:47 Metodos para hacer select a una tabla