Metodos para hacer select a una tabla

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.

Responses

Browse pgsql-es-ayuda by date

  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