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.

Responder a