29/02/2008, 07:35
|
| | 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. |