Ver Mensaje Individual
  #2 (permalink)  
Antiguo 02/11/2011, 11:32
MarioHeredia
 
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 134
Antigüedad: 13 años, 8 meses
Puntos: 3
Respuesta: procedimiento almacenado consulta

Hola Arekumaro,

Te adelanto que tu procedure no va a funcionar como pretendes. Porque existen algunas cosas que se pueden cambiar en tiempo de ejecucion y otras que no.

Los nombres de las tablas es una de las cosas que no se puede cambiar. Necesitas implementar SQL Dinamico haciendo uso de la sentencia EXECUTE IMMEDIATE para esto.

Otra opcion para solucionar el tema de las tablas podria ser:
En base al valor de parametro, en una estructura if preguntas: ¿ tablas es igual a TablaUno o a TablaDos? Y dependiendo del resultado ejecutas una consulta u otra. Si, las dos consultas deben repertirse totalmente solo que solamente ejecutas uno o la otra, me explico?

Esto es asi porque el procedure debe poder compilarse, por eso no puedes cambiarlo cuando esta en ejecucion, la idea de los procedures es que te evitas el tiempo de compilacion, entre otras cosas.

En el caso del CodFuente y su implementacion en la parte de los filtros de la consulta pasa lo mismo, no lo puedes cambiar. La misma solucion que para el parametro tablas debes implementar aqui.

Ahora con las fechas, en buena hora amigo, eso si tiene solucion. !!!
En la consulta deja las fechas de la siguiente manera.

Código SQL:
Ver original
  1. AND TO_DATE(CLIENTE_CURSO.FECHA_ENTRADA) BETWEEN TO_DATE(SFec, 'DD.MM.YYYY') AND TO_DATE(sFec2, 'DD.MM.YYYY') + 86399/86400

De esta manera puedes pasarlas las fechas como un String y no tener errores de compilacion.

Notas:

- Estoy notando que la tabla CLIENTE_CURSO tiene un campo FECHA_ENTRADA que es VARCHAR o VARCHAR2 y no es de tipo DATE. Porque es eso? Es realmente necesario que sea de tipo String y no de tipo fecha? Esta decision de mantener un campo de tipo String te afecta la performance de la consulta porque hace un full scan de la tabla CLIENTE_CURSO. Intenta corregir esto, notaras una mejora en el tiempo de resolucion de la consulta.

Y por ultimo, si lo que necesitas hacer es muy dinamico, es decir, que tu procedure tiene muchos valores distintos para el parametro tablas y CodFuente y esta solucion no te funciona, prueba con sqlplus. Lee un poco sobre esto.

Arekumaro, Exitos.
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.