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.