[ERRO!] Iterar em uma tabela Oracle com CURSOR PL/SQL

Galera não sei pq mais aqui em casa não roda nada… no trabalho eu faço e roda mtu estranho

Alguem ajuda…

[code]DECLARE
CURSOR C1 IS SELECT FUNC_NOME , FUNC_SALARIO FROM FUNCIONARIO;
RC1 C1%ROWTYPE;
BEGIN

 FOR RC1 IN C1 LOOP  
    FETCH C1 INTO RC1;  
    dbms_output.put_line(RC1.FUNC_NOME || '   ' || RC1.FUNC_SALARIO);
    dbms_output.new_line(); 
 END LOOP;

END; [/code]

Só quero mostrar na tela todos os funcionarios…
E não roda…

Erro em Linha 7
Cursor inválido…

Já fiz a query fora do cursor e me traz os valores…

o cursor já está aberto!! :cry: :cry: :cry: :cry: :cry:

vc misturou as duas formas de usar cursor

uma é com FOR, que acredito que seja a que vc tentou fazer,
e outra é usando OPEN e FETCH

com OPEN E FETCH:

DECLARE  
     CURSOR C1  IS 
          SELECT FUNC_NOME, 
                      FUNC_SALARIO 
             FROM FUNCIONARIO;  
     R1 C1%ROWTYPE;  
BEGIN   

     OPEN C1;
     LOOP
        FETCH C1 INTO R1;
        EXIT WHEN C1%NOTFOUND;  

        dbms_output.put_line(R1.FUNC_NOME || '   ' || R1.FUNC_SALARIO);
        dbms_output.new_line(); 
     END LOOP;
   
END;  

usando FOR

DECLARE  
     CURSOR C1  IS 
          SELECT FUNC_NOME, 
                      FUNC_SALARIO 
             FROM FUNCIONARIO;  

BEGIN   

     FOR R1 IN C1 LOOP
        dbms_output.put_line(R1.FUNC_NOME || '   ' || R1.FUNC_SALARIO);
        dbms_output.new_line(); 
     END LOOP;
   
END;  

Diferenças entre os dois é que com OPEN e FETCH, vc tem um controle maior sobre o cursor.
Porém vc é mais raro vc usar esse controle maior, normalmente só se quer iterar sobre o cursor sem ter a necessidade de fazer outras operações com ele.

[]'s

Valeu mano! Muito obrigado! Estou fazendo um treinamento onde trabalho e precisava muito dessa ajuda!

Abraço!