Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

Next:From: Guillermo VillanuevaDate: 2011-11-17 15:50:51
Subject: Re: Metodos para hacer select a una tabla
Previous:From: Alejandro CarrilloDate: 2011-11-17 11:36:31
Subject: Re: Rv: recorrer old

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group