
CORTAR UN FOR LOOP SIN CONTINUE
Publicado por miriam (1 intervención) el 07/04/2017 22:19:37
como estan soy nueva en este de subir mis codigos pero estoy tratando con esto
el problema es que tengo dos tablas aag_lectura y aag_cuenta, mi for recorre las dos donde cada cuenta tiene n lecturas, sin embargo deseo extraer aquellas cuentas cuyas lecturas anteriores y actuales sean iguales, practicamente es lo que este procedimiento realiza, pero solo debe traerme aquellas cuyas lecturas repetidas son hasta el mes corrido, es decir si estamos abril 2016 y mi cuenta 1 tiene la misma lectura desde enero 2017 hasta abril 2017 debe traerla, pero si mi cuenta 1 tiene la misma lectura desde enero 2017 hasta marzo 2017 y en abril 2017 cambio NO DEBE MOSTRARLA y este es el problema
intente con EXIT WHEN PERO SE ME SALE DEL BUCLE Y NO SIGUE CON LAS OTRAS CUENTAS de las misma forma con CONTINUE pero en esta version no me permite usarlo. alguna idea ?
el problema es que tengo dos tablas aag_lectura y aag_cuenta, mi for recorre las dos donde cada cuenta tiene n lecturas, sin embargo deseo extraer aquellas cuentas cuyas lecturas anteriores y actuales sean iguales, practicamente es lo que este procedimiento realiza, pero solo debe traerme aquellas cuyas lecturas repetidas son hasta el mes corrido, es decir si estamos abril 2016 y mi cuenta 1 tiene la misma lectura desde enero 2017 hasta abril 2017 debe traerla, pero si mi cuenta 1 tiene la misma lectura desde enero 2017 hasta marzo 2017 y en abril 2017 cambio NO DEBE MOSTRARLA y este es el problema
intente con EXIT WHEN PERO SE ME SALE DEL BUCLE Y NO SIGUE CON LAS OTRAS CUENTAS de las misma forma con CONTINUE pero en esta version no me permite usarlo. alguna idea ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
DECLARE
err_num NUMBER;
err_msg VARCHAR2(255);
CURSOR CUENTAS IS
SELECT UNIQUE(A.CUENTA)
FROM AAG_LECTURA a, AAG_CUENTA B
WHERE A.CUENTA = B.CODIGO_CUENTA AND a.ESTADO ='PRO' AND ANIO = :ANO AND B.CODIGO_CUENTA > 8000 ORDER BY a.CUENTA DESC;
CURSOR LECTURAS IS
SELECT a.cuenta,a.ANIO,A.DESDE,a.secuencia,a.lec_anterior,a.lec_actual, B.PRO_NOMBRE1,B.PRO_APELLIDO1, B.PRO_NOMBRE2,B.PRO_APELLIDO2
FROM AAG_LECTURA a, AAG_CUENTA B
WHERE A.CUENTA = B.CODIGO_CUENTA AND a.ESTADO ='PRO' AND ANIO = :ANO AND B.CODIGO_CUENTA > 8000 ORDER BY a.CUENTA,A.DESDE DESC;
MES NUMBER(2):=0;
CUENTA NUMBER(5) :=0;
--para que verifique SI EL SGT REGISTRO TIENE CONSUMO 0
CONSUMOANTERIOR NUMBER(8):=-1;
CONSUMO NUMBER(5) :=0;
BANDERA NUMBER(1) :=1;
BANDERAC NUMBER(1) :=1;
BANDERA2 NUMBER(1) :=1;
BANDERA3 NUMBER(1) :=0;
BEGIN
SELECT MIN(a.cuenta) INTO CUENTA
FROM AAG_LECTURA a, AAG_CUENTA B
WHERE A.CUENTA = B.CODIGO_CUENTA AND a.ESTADO ='PRO' AND ANIO = :ANO AND B.CODIGO_CUENTA >8000 ORDER BY a.CUENTA,A.DESDE DESC;
FOR REG2 IN CUENTAS LOOP
FOR REG IN LECTURAS LOOP
CONSUMO:=REG.LEC_ACTUAL-REG.LEC_ANTERIOR;
--para ver si el regiostro es? de la misma cuenta
IF CUENTA=REG.CUENTA THEN
BANDERAC:=1;
ELSE
BANDERAC:=0;
END IF;
--para ver si la lectura es 0
IF CONSUMO=0 THEN
BANDERA:=1;
ELSE
BANDERA:=0;
END IF;
-- SI EL CONSUMO ANTERIOR ES CERO QUIERER DECIR QUE SE DEBE INGRESAR
IF CONSUMOANTERIOR = 0 THEN
BANDERA2 := 1;
ELSE
BANDERA2 :=0;
END IF;
--- SI EL CONSUMO ES 0 Y EL CONSUMOANTERIOR ES 0 ENTONCES SE INSERTA
IF CONSUMO=0 AND BANDERAC=1 AND BANDERA=1 AND BANDERA2 = 1 AND BANDERA3 = 0 THEN
MES := MES + 1;
INSERT INTO AAG_T_SC (cuenta,PRO_NOMBRE1,PRO_NOMBRE2,PRO_APELLIDO1,PRO_APELLIDO2,lectura_anterior,lectura_actual,mes, ANIO)
values (reg.cuenta,REG.PRO_NOMBRE1,REG.PRO_NOMBRE2,REG.PRO_APELLIDO1,REG.PRO_APELLIDO2,reg.lec_anterior,reg.lec_actual,mes, REG.ANIO);
ELSE
MES := 0;
BANDERA:=0;
BANDERA2 :=0;
END IF;
CONSUMOANTERIOR:= CONSUMO;
CUENTA := REG.CUENTA;
END LOOP;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
err_num := SQLCODE;
err_msg := SQLERRM;
DBMS_OUTPUT.put_line('Error:'||TO_CHAR(err_num));
DBMS_OUTPUT.put_line(err_msg);
END;
Valora esta pregunta


0