FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
¿Cláusula similar al Break para procedimientos almacenados?
Vereis tengo un procedimiento almacenado con Interbase 6.0 , lo que intento con él es sacar sólo 2 resultados de la consulta para cada campo clave, es decir,
Código:
1,....,0,0,... 5,....,2000,3000,.... 5,...,2500,3500,.... . . 10,....,2500,3500,.... 10,....,2600,2000,.... . . 15,....,2000,3000,... 15,....,1000,25000,.... . él procedimiento de interbase es el siguiente: Código:
cont=1; FOR SELECT LECTURA FROM LECTURAS WHERE NUMERO=:NUMERO AND FECHA<:HOY ORDER BY FECHA DESC INTO :LECT DO BEGIN if (CONT=1) then lect1=:lect; else begin lect2=:lect; end cont=cont+1; if(cont>2) then begin suspend; break; end END pero el break da error no es válido para interbase, con exit sólo me saca los 2 primeros del 5 y se sale del procedimiento, así que necesito algo similar al break. Ahora lo que hago es sacar todas las lecturas anterioes y con el 'next' pasar de lecturas desde Delphi, pero tarda 14 segundos y me parece mucho tiempo. Si alguien sabe la equivalencia de break en interbase u otra forma de hacer lo expuesto, se lo agradecería muchísimo. Gracias de antemano. PD: Espero haberme explicado con claridad, si alñguien no entiende lo expuesto ruego me lo comuniquen, ya saben uno lo tiene en la cabeza y le parece tan sencillo de explicar lo complicado es que le entiendan, jajajajaja Última edición por VRO fecha: 07-06-2005 a las 12:46:12. |
#2
|
|||
|
|||
Chevere el ejercicio, me puse en la tarea de hacerlo, pero en Firebird 1.5.2, espero que
te sirva. Meta usted unos valores, por aca en Colombia se le llaman contadores a los dispositivos que cuentan el numero de metros cubicos que consume una casa y en algunos sistemas para servicios publicos se considera el numero de contador como identificador unico. En Colombia se le llama la 'critica' a la informacion de consumos de los 6 meses anteriores para cualquier recibo de servicio publicos domiciliarios, y es de obligatorio cumplimiento que esos valores aparezcan en el recibo. El indice sugerido es mas rapido que uno basado en (fecha + contador). El pedacito de codigo 'and :i < 3' es una ventaja de los procedimientos almacenados, es decir, puede introducirse dentro del for select una condicion de salida que no tiene nada que ver con los campos de la tabla seleccionada !!! Haste unas pruebas de rendimiento con SQLHammer, es Open SOurce y cuenta con un analizador de consultas (bueno realmente muestra las estadisticas de la consulta pero es muy bueno).
__________________
Luis Fernando Buelvas T. |
#3
|
||||
|
||||
Espero te sirva:
Código:
FOR SELECT FIRST 2 LECTURA FROM LECTURAS WHERE NUMERO=:NUMERO AND FECHA<:HOY ORDER BY FECHA DESC INTO :LECT DO BEGIN SUSPEND; END Jorge. |
#4
|
|||
|
|||
Gracias a ambos por vuestra predisposición para ayudarme.
En primer lugar Jwmoreira no puedo utilizar el first 2 con interbase, lo probé pero esa cláusula es para Firebird, tambien lo intenté con limit 2 (que se utiliza en Visual Basic) y ha diferencia del first de situa al final de la consulta. Para Ibuelvas, la forma de hallar el consumo de agua de una casa en Colombia y en España es exactamente la misma. Me has dejado alucina con lo de meter una variable cualquiera en una consulta para que me restringa el numero de veces que se ha de ejecutar. Muchas gracias ha ambos me habeis servidor de mucha ayuda Última edición por VRO fecha: 09-06-2005 a las 10:56:35. |
|
|
|