Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Consulta con varios criterios pasados como parametros al procedimiento.

Estas en el tema de Consulta con varios criterios pasados como parametros al procedimiento. en el foro de Oracle en Foros del Web. Hola a Todos, Necesito ayuda, a ver como puedo hacer lo siguiente. Tengo un formulario de busqueda que recoge varios valores. Estos valores se los ...
  #1 (permalink)  
Antiguo 29/02/2008, 06:50
 
Fecha de Ingreso: febrero-2006
Mensajes: 21
Antigüedad: 18 años, 2 meses
Puntos: 0
Consulta con varios criterios pasados como parametros al procedimiento.

Hola a Todos,

Necesito ayuda, a ver como puedo hacer lo siguiente.

Tengo un formulario de busqueda que recoge varios valores.

Estos valores se los tengo que pasar a un procedimiento y que me realice la busqueda de registros que tengan los campos iguales a los valores que les paso.

IMP: Teniendo en cuenta que todos los campos pueden estar vacios en alguna busqueda (devolveria todos los registros) o ninguno (busqueda mas restrictiva).

Saludos
  #2 (permalink)  
Antiguo 29/02/2008, 07:35
 
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 134
Antigüedad: 16 años, 5 meses
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.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:51.