Oracle - Bucle q no lo es

 
Vista:

Bucle q no lo es

Publicado por Sergio (48 intervenciones) el 07/04/2003 10:52:40
Una pregunta sencillita, tengo el siguiente bucle con la condición de salida en el EXIT-WHEN. La condición de salida no se cumple pero el bucle solamente lo hace una vez. A continuación os pongo el bucle, a ver si veis lo q hago mal.

AUX_FECHA := :AUS.F_INI;
LOOP
DECLARE
CURSOR C1 IS
SELECT HORAS
FROM JOR_TRAB
WHERE X_TRAB = PKG_GLO.X_TRAB
AND FECHA = AUX_FECHA;
BEGIN
OPEN C1;
FETCH C1 INTO AUX_HORAS;
AUX_NOFOUND := C1%NOTFOUND;

IF (AUX_HORAS > 0) THEN
UPDATE JOR_TRAB SET HORAS = 0
WHERE X_TRAB = PKG_GLO.X_TRAB AND FECHA = AUX_FECHA;
AUX_FECHA := AUX_FECHA + 1;
ELSE
AUX_FECHA := AUX_FECHA + 1;
END IF;

IF AUX_NOFOUND THEN
AUX_FECHA := AUX_FECHA + 1;
END IF;
END;
EXIT WHEN AUX_FECHA > :AUS.F_FIN;

END LOOP;

Muchisimas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Bucle q no lo es

Publicado por DACH (258 intervenciones) el 07/04/2003 16:24:06
Hola
Revisa el codigo....

AUX_FECHA := :AUS.F_INI;
LOOP
DECLARE
CURSOR C1 IS
SELECT HORAS
FROM JOR_TRAB
WHERE X_TRAB = PKG_GLO.X_TRAB
AND FECHA = AUX_FECHA;
BEGIN
OPEN C1;
FETCH C1 INTO AUX_HORAS;
AUX_NOFOUND := C1%NOTFOUND;

IF (AUX_HORAS > 0) THEN
UPDATE JOR_TRAB SET HORAS = 0
WHERE X_TRAB = PKG_GLO.X_TRAB AND FECHA = AUX_FECHA;
AUX_FECHA := AUX_FECHA + 1;
ELSE
AUX_FECHA := AUX_FECHA + 1;
END IF;

IF AUX_NOFOUND THEN
AUX_FECHA := AUX_FECHA + 1;
END IF;
END; ------- ACA ESTA EL PROBLEMA

EXIT WHEN AUX_FECHA > :AUS.F_FIN;

END LOOP;

------- DEBES UBICAR ACA EL FIN DEL BLOQUE DE INSTRUCCIONES...

Salu2.-
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Bucle q no lo es

Publicado por Byron (300 intervenciones) el 07/04/2003 17:02:28
Revisa este codigo, tal vez corrija tu error:

DECLARE
CURSOR C1 IS
SELECT HORAS, FECHA
FROM JOR_TRAB
WHERE X_TRAB = PKG_GLO.X_TRAB
AND FECHA BETWEEN :AUS.F_INI AND :AUS.F_FIN;

BEGIN
FOR REG IN C1 LOOP
IF (REG.HORAS > 0) THEN
UPDATE JOR_TRAB SET HORAS = 0
WHERE X_TRAB = PKG_GLO.X_TRAB AND FECHA = REG.FECHA;
END IF;

END LOOP;

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Bucle q no lo es

Publicado por DACH (258 intervenciones) el 07/04/2003 19:29:20
Hola
Byron, esta malo el comienzo del bloque de instrucciones (BEGIN) no esta cerrado...., por otro lado Sergio necesita cortar la ejecución del loop de acuerdo a cierta condición...

Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Bucle q no lo es

Publicado por Byron (300 intervenciones) el 07/04/2003 21:16:18
Obviamente se me olvidó poner el END; va al final de todo lo que puse, el loop lo ingrese sin exit-when porque el cursor ya extrae en el between el rango de fechas dado que es lo que yo entendi que Sergio queria hacer porque por cada ves que recorria el loop aumentaba un dia hasta que la fecha auxiliar que al inicio se le cargaba fecha inicio llegase a ser mayor que fecha fin que es por donde sale el exit-when

Gracias por tu observación DACH

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar