![]() |
Utilizar un valor de un Select dentro de otro Select
Uff !
A ver cómo me explico .... No sé si se puede utilizar en FIREBIRD, un valor de un Select determinado que se va a repetir varias veces dentro de otro Select. Algo así como :
He esquematizado bastante la consulta aquí expuesta, pero realmente el valor (Min_CampoB1) del Select de la Subconsulta necesito utilizarlo en numerosas condiciones y subconsultas posteriores, por lo que no considero rápido y eficiente utilizarlo de esta manera :
Algún consejo ? :rolleyes: ... muchas gracias ! ;) |
No sé si lo siguiente es correcto y si realmente es eficiente en cuanto a tiempo de ejecución frente a otras posibilidades :
... pero me permite utilizar TB.Min_CampoB1 como 'valor' en toda la consulta. El Stored Procedure SP_PRUEBA se podría definir como :
|
¿Y has conseguido solucionarlo de esa forma?
|
Hola Casimiro !
Estoy en ello ... ahora me pongo de nuevo y a ver si lo termino tal y como lo expuse anteriormente. Aunque no cumpla ningún propósito, quiero mostrar de qué tipo de sentencia sin optimizar estamos hablando ....
:o :o :o Como podrás observar en todo este 'peassso' de Sentencia, el caso que estoy exponiendo en este hilo aparece múltiples veces en la sentencia, y creo que no va a ser muy eficiente de esta manera. Por eso estoy intentando mejorarlo. |
Y todo esto en código Delphi era algo así como ...
... menudo tostón, no ??? Y estas son sólo 200 y poco líneas de las 1800 que tiene el procedimiento completo y que quiero optimizar con sentencias SQL en vez de bucles de programación, y además meterlo todo en un SP que se ejecute en el servidor, y que no tenga que haber tráfico de datos en la red para poder ejecutar el código necesario. Probablemente así, logre optimizar un proceso que al pedir ahora un mes de datos, tarda unos 30 o 40 segundos, por todos los cálculos internos que debe de realizar, a conseguirlo en un 'abrir y cerrar de ojos'. Ya lo he hecho con algún que otro proceso diferente también del programa. Lo que antes tardaba 10 - 15 segundos, ahora es inmediato .... 'ya ta !!'. Con esto se puede observar que como había leido ya alguna vez en alguna parte .... que las sentencias SQL pueden ser todo lo complejas que el programador sea capaz de programar ! Ya pondré los resultados definitivos cuando esté todo hecho ! |
Parece que funciona de momento ....
Tengo que terminar ahora el código completo, para encajar todo el código Delphi en sentencias SQL. De momento el tocho de sentencia anterior ha quedado reducido a :
siendo SP_PAXDETAIL_PAXTYPE, SP_PAXDETAIL_BOARDTYPE y SP_PAXDETAIL_OPERATORDEBIT los procedimientos almacenados que he creado. No creo necesario detallar el contenido de los SP ya que lo único que importa aquí es que llamo desde esta sentencia a los SP's sin entrar en el detalle de lo que devuelve cada uno. :) |
¡¡¡Mareante!!!:confused: :D
Lo raro es que no te hayas quedado sin memoria, en versiones anteriores de firebird, creo que hasta la v1.0 el tamaño máximo para los procedimientos, triggers, etc. era de sólo 32 Kb. Así que había que seguir el lema de "devide y vencerás" :), haciendo lo que has hecho, procedimientos alternativos que se llaman desde el principal. Lo malo de ese "mogollón" es que como algo no funcione bien te tienes que concentrar "mu bien concentrao" para descubrir el problema :) |
La franja horaria es GMT +2. Ahora son las 23:50:25. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi