Ver Mensaje Individual
  #2 (permalink)  
Antiguo 29/02/2008, 07:35
MarioHeredia
 
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 134
Antigüedad: 17 años
Puntos: 3
Re: Consulta con varios criterios pasados como parametros al procedimiento.

En este ejemplo traes dos valores (fecha y proceso_id) producto de la busqueda de 10 parametros, que pueden tener valor o no.

Código:
  PROCEDURE GET_DATA (P_DATE           OUT DATE,
                      P_PROCESO_ID     OUT NUMBER,
                      P_PARAM1         IN NUMBER,
                      P_PARAM2         IN NUMBER,
                      P_PARAM3         IN NUMBER,
                      P_PARAM4         IN NUMBER,
                      P_PARAM5         IN NUMBER,
                      P_PARAM6         IN NUMBER,
                      P_PARAM7         IN NUMBER,
                      P_PARAM8         IN NUMBER,
                      P_PARAM9         IN NUMBER,
                      P_PARA10         IN NUMBER) IS

  BEGIN
    P_DATE := SYSDATE;
    P_PROCESO_ID := 0;

    SELECT FECHA,
           PROCESO_ID
      INTO P_FECHA,
           P_PROCESO_ID
      FROM TABLA_FUENTE P
     WHERE PARAM1 = DECODE(P_PARAM1, NULL, PARAM1, P_PARAM1)
       AND PARAM2 = DECODE(P_PARAM2, NULL, PARAM2, P_PARAM2)
       AND PARAM3 = DECODE(P_PARAM3, NULL, PARAM3, P_PARAM3)
       AND PARAM4 = DECODE(P_PARAM4, NULL, PARAM4, P_PARAM4)
       AND PARAM5 = DECODE(P_PARAM5, NULL, PARAM5, P_PARAM5)
       AND PARAM6 = DECODE(P_PARAM6, NULL, PARAM6, P_PARAM6)
       AND PARAM7 = DECODE(P_PARAM7, NULL, PARAM7, P_PARAM7)
       AND PARAM8 = DECODE(P_PARAM8, NULL, PARAM8, P_PARAM8)
       AND PARAM9 = DECODE(P_PARAM9, NULL, PARAM9, P_PARAM9)
       AND PARA10 = DECODE(P_PARA10, NULL, PARA10, P_PARA10)

  EXCEPTION
    WHEN OTHERS THEN
      P_DATE := SYSDATE;
      P_PROCESO_ID := 0;
  END;
La cable: es el decode en el cada uno de los filtros del Where, que expresa "Si el Parametro esta vacio, hago el join con el mismo valor de la tabla, si tiene valor, uso el valor del parametro".

Espero que esto te ayude.

Saludos, Mario.
__________________
Y venció David al filisteo con honda y piedra; e hirió al filisteo y lo mató, sin tener David espada en su mano.