De proC a PL/SQL
Publicado por Antonio (5 intervenciones) el 27/03/2020 09:17:41
Buenas gente! es mi primer post y primera cuestion jeje
Estoy migrando de proC (C) a PL/SQL
El tema es que no se como hacer para.. según la condicion IF usar un cursor u otro.
En C:
En PL/SQL creo un procedure que declara los dos cursores, pero a la hora de abrir un cursor u otro, hago un FOR, los cuales, tengo que replicar dos veces el programa..
No hay otra manera?
Estoy migrando de proC (C) a PL/SQL
El tema es que no se como hacer para.. según la condicion IF usar un cursor u otro.
En C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if (mes_proc == 1) {
EXEC SQL DECLARE c_trab1 CURSOR FOR
SELECT dni
FROM acum_irpf
WHERE anomes_modi < TO_NUMBER(TO_CHAR(:aano_proc-1)||'12')
ORDER BY dni;
}
else {
EXEC SQL DECLARE c_trab CURSOR FOR
SELECT dni
FROM contri_irpf
WHERE estado = '2'
GROUP BY dni
ORDER BY dni;
}
if (mes_proc == 1) {
EXEC SQL OPEN c_trab1;
}
else {
EXEC SQL OPEN c_trab;
}
En PL/SQL creo un procedure que declara los dos cursores, pero a la hora de abrir un cursor u otro, hago un FOR, los cuales, tengo que replicar dos veces el programa..
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
create or replace procedure cirpf_rellen(p_id_ejecucion IN NUMBER, p_error OUT VARCHAR) IS
CURSOR trab1 IS
SELECT dni
FROM acum_irpf
WHERE anomes_modi < TO_NUMBER(TO_CHAR(ano_proc-1)||'12')
ORDER BY dni;
CURSOR trab IS
SELECT dni
FROM contri_irpf
WHERE estado = '2'
GROUP BY dni
ORDER BY dni;
BEGIN
IF (mes_pro = 1) THEN
FOR c_trab1 IN trab1
LOOP
"TODO EL PROGRAMA"
END LOOP;
ELSE
FOR c_trab IN trab
LOOP
"TODO EL PROGRAMA"
END LOOP;
END IF;
No hay otra manera?
Valora esta pregunta


0