Oracle - De proC a PL/SQL

 
Vista:
Imágen de perfil de Antonio
Val: 7
Ha disminuido su posición en 2 puestos en Oracle (en relación al último mes)
Gráfica de Oracle

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:
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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder