From: | Alejandro Carrillo <fasterzip(at)yahoo(dot)es> |
---|---|
To: | "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org> |
Cc: | "alvherre(at)alvh(dot)no-ip(dot)org" <alvherre(at)alvh(dot)no-ip(dot)org> |
Subject: | Metodos para hacer select a una tabla |
Date: | 2011-11-17 14:47:47 |
Message-ID: | 1321541267.22235.YahooMailNeo@web27401.mail.ukl.yahoo.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
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.
From | Date | Subject | |
---|---|---|---|
Next Message | Guillermo Villanueva | 2011-11-17 15:50:51 | Re: Metodos para hacer select a una tabla |
Previous Message | Alejandro Carrillo | 2011-11-17 11:36:31 | Re: Rv: recorrer old |