Não consigo abrir 2 loop para carregar a mesma variavel

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
cassianoprezentini
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Sex, 09 Jan 2009 3:56 pm
Localização: Santo André

oBS. eu preciso ter o seguinte resultado
funcionario matricula tplancto salario
A 123 1 32,00
A 123 2 45,00
A 123 3 100,00
A 123 4 100,00

Mas não estou conseguindo com essa logica abaixo, podem me ajudar.

Selecionar tudo

DECLARE

V_TPLANCTO  VARCHAR(2);
V_FUNCIONARIOS VARCHAR(50);
N_SALARIOS NUMBER(10,0);

CURSOR CURSOR1 IS                                                                                                       
SELECT  TPLANCTO,
             FUNCIONARIOS,
             MATRICULA
FROM CADASTRO;                                                                    

CURSOR CURSOR2 ( CURSOR_1 CURSOR1%ROWTYPE)IS                                                                                                       
SELECT  TPLANCTO,
             SALARIOS
FROM VAGAS
WHERE MATRICULA = CURSOR_1.MATRICULA;

CURSOR_1 CURSOR1%ROWTYPE;
CURSOR_2 CURSOR2%ROWTYPE;

BEGIN

OPEN CURSOR1;
  LOOP
    FETCH CURSOR1 INTO CURSOR_1;
    EXIT WHEN CURSOR1%NOTFOUND;

OPEN CURSOR2(CURSOR_1);
  LOOP
    FETCH CURSOR2 INTO CURSOR_2;
    EXIT WHEN CURSOR2%NOTFOUND;

BEGIN

IF CURSOR_1.TPLANCTO = '01' THEN
    V_TPLANCTO = '01' ;
ELSIF CURSOR_2.TPLANCTO ='02' THEN
    V_TPLANCTO = '02';
ELSIF CURSOR_2.TPLANCTO ='03' THEN
    V_TPLANCTO = '03';
ELSIF CURSOR_2.TPLANCTO ='04' THEN
    V_TPLANCTO = '04';

END IF;

END;

V_FUNCIONARIOS := CURSOR_1.FUNCIONARIOS;
v_matricula:= CURSOR_1.matricula;

N_SALARIOS := CURSOR_2.SALARIOS;

insert into carga_123 (funcionario,
                                matricula,
                                tplancto,
                                salario)
                     values(v_funcionario,
                                v_matricula,
                                v_tplancto,
                                v_salario);                                


end loop CURSOR1;
      close CURSOR1; 

end loop CURSOR2;
      close CURSOR2; 

IF MOD(v_contador, 100) = 0 THEN
   COMMIT;
END IF;

END;
margaridi
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 21
Registrado em: Ter, 08 Abr 2008 11:09 am
Localização: Curitiba - PR
Contato:
----------------------------
Margaridi, Marco Aurélio
www.margaridi.com

Primeiro você deve fechar o loop mais interno (CURSOR2) e depois o mais externo (CURSOR1):

Selecionar tudo

DECLARE 

   V_TPLANCTO     VARCHAR(2); 
   V_FUNCIONARIOS VARCHAR(50); 
   V_MATRICULA    NUMBER(08); 
   N_SALARIOS     NUMBER(10,0); 
   V_CONTADOR     NUMBER(8) := 0;

   CURSOR CURSOR1 IS 
      SELECT TPLANCTO
      ,      FUNCIONARIOS
      ,      MATRICULA 
      FROM   CADASTRO; 

   CURSOR CURSOR2 (C_MATRICULA NUMBER) IS 
      SELECT SALARIOS 
      FROM   VAGAS 
      WHERE  MATRICULA = C_MATRICULA; 

   CURSOR_1 CURSOR1%ROWTYPE; 
   CURSOR_2 CURSOR2%ROWTYPE; 

BEGIN 

   OPEN CURSOR1; 

   LOOP 

      FETCH CURSOR1 INTO CURSOR_1; 

      IF CURSOR1%NOTFOUND THEN
         EXIT;
      END IF;

      OPEN CURSOR2(CURSOR_1.MATRICULA);

      LOOP 

         FETCH CURSOR2 INTO CURSOR_2; 

         IF CURSOR2%NOTFOUND THEN
            EXIT;
         END IF;

         V_TPLANCTO     := CURSOR_1.TPLANCTO;
         V_FUNCIONARIOS := CURSOR_1.FUNCIONARIOS; 
         V_MATRICULA    := CURSOR_1.MATRICULA; 
         N_SALARIOS     := CURSOR_2.SALARIOS; 
         V_CONTADOR     := V_CONTADOR + 1;

         INSERT INTO CARGA_123 (FUNCIONARIO,    MATRICULA,   TPLANCTO,   SALARIO) 
                        values (V_FUNCIONARIOS, V_MATRICULA, V_TPLANCTO, N_SALARIOS); 

      END LOOP CURSOR2; 
      CLOSE CURSOR2; 

      IF MOD(v_contador, 100) = 0 THEN 
         COMMIT; 
      END IF; 

   END LOOP CURSOR1; 
   CLOSE CURSOR1; 

   COMMIT;
   
END; 

/

Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 10 visitantes