Forum Stats

  • 3,768,730 Users
  • 2,252,841 Discussions
  • 7,874,701 Comments

Discussions

Problema com exibição de linhas

Estou precisando exibir um conjunto de linhas vindo de um fetch, mas ele não esta retornando nada somente erro.

SET SERVEROUTPUT ON;

DECLARE

    CURSOR SEE_AUTOR IS SELECT NM_AUTOR FROM T_AU7_AUTOR; -- ABERTURA DO CURSOR - INFORMANDO SER UM SELECT

    SEE_ AUT SEE_AUTOR%ROWTYPE; -- SEE_AUT = Variável SEE_AUTOR = CURSOR

BEGIN

OPEN SEE_AUTOR;

    LOOP

        FETCH SEE_AUTOR INTO SEE_AUT;

        DBMS_OUTPUT.PUT_LINE('NOME DO AUTOR: ' ||SEE_AUT.NM_AUTOR);

        EXIT WHEN SEE_AUTOR%NOTFOUND;       

     END LOOP;  

CLOSE SEE_AUTOR; -- FECHAMENTO DO CURSOR   

END

Erro a partir da linha : 6 no comando -

DECLARE

    CURSOR SEE_AUTOR IS SELECT NM_AUTOR FROM T_AU7_AUTOR; -- ABERTURA DO CURSOR - INFORMANDO QUE É UM SELECT

    --E QUE ELE ESTA SELECIONANDO O CAMPO NM_AUTOR DA TAB T_AU7_AUTOR

    SEE_ AUT SEE_AUTOR%ROWTYPE; -- SEE_AUT = Variável SEE_AUTOR = CURSOR

BEGIN

OPEN SEE_AUTOR;

    LOOP

        FETCH SEE_AUTOR INTO SEE_AUT;

        DBMS_OUTPUT.PUT_LINE('NOME DO AUTOR: ' ||SEE_AUT.NM_AUTOR);

        EXIT WHEN SEE_AUTOR%NOTFOUND;       

     END LOOP;  

CLOSE SEE_AUTOR; -- FECHAMENTO DO CURSOR   

END;

Relatório de erros -

ORA-06550: linha 4, coluna 14:

PLS-00103: Encountered the symbol "SEE_AUTOR" when expecting one of the following:

   := . ( @ % ; not nulo faixa padrão caractere

The symbol ":=" was substituted for "SEE_AUTOR" to continue.

06550. 00000 -  "line %s, column %s:\n%s"

*Cause:    Usually a PL/SQL compilation error.

*Action:

Answers

  • J.Laurindo Chiappa
    J.Laurindo Chiappa Member Posts: 28
    edited Aug 30, 2019 3:19PM

    Vc tem um erro de digitação bem SUTIL, que só se descobre executando, mesmo .. Olha só :

    => primeiro, crio a tabela e faço uma massa de dados :

    [email protected]:SQL>create table T_AU7_AUTOR(NM_AUTOR varchar2(100));

    Tabela criada.

    [email protected]:SQL>insert into T_AU7_AUTOR values('JOAO');

    1 linha criada.

    [email protected]:SQL>insert into T_AU7_AUTOR values('JOSE');

    1 linha criada.

    [email protected]:SQL>SELECT NM_AUTOR FROM T_AU7_AUTOR;

    NM_AUTOR

    ----------------------------------------------------------------------------------------------------

    JOAO

    JOSE

    => Ok, copiei e colei teu bloco :

    [email protected]:SQL>SET SERVEROUTPUT ON;

    [email protected]:SQL>DECLARE

      2      CURSOR SEE_AUTOR IS SELECT NM_AUTOR FROM T_AU7_AUTOR; -- ABERTURA DO CURSOR - INFORMANDO SER UM SELECT

      3      SEE_ AUT SEE_AUTOR%ROWTYPE; -- SEE_AUT = Variável SEE_AUTOR = CURSOR

      4  BEGIN

      5     OPEN SEE_AUTOR;

      6     LOOP

      7        FETCH SEE_AUTOR INTO SEE_AUT;

      8        DBMS_OUTPUT.PUT_LINE('NOME DO AUTOR: ' ||SEE_AUT.NM_AUTOR);

      9        EXIT WHEN SEE_AUTOR%NOTFOUND;      

    10     END LOOP; 

    11     CLOSE SEE_AUTOR; -- FECHAMENTO DO CURSOR  

    12  END;

    13  /

        SEE_ AUT SEE_AUTOR%ROWTYPE; -- SEE_AUT = Variável SEE_AUTOR = CURSOR

                 *

    ERRO na linha 3:

    ORA-06550: line 3, column 14:

    PLS-00103: Encountered the symbol "SEE_AUTOR" when expecting one of the following:

    := . ( @ % ; not null range default character

    The symbol ":=" was substituted for "SEE_AUTOR" to continue.

    ==> Tá vendo que o * da msg de erro tá bem do lado da variável ?? É justamente AÍ que tá o erro, vc deixou um ESPAÇO EM BRANCO no nome da variável, vc escreveu :

    SEE_ AUT SEE_AUTOR%ROWTYPE; -- SEE_AUT = Variável SEE_AUTOR = CURSOR

    e o correto era :

    SEE_AUT SEE_AUTOR%ROWTYPE; -- SEE_AUT = Variável SEE_AUTOR = CURSOR

    é esse mísero espaço em branco... Corrigindo , aí roda :

    [email protected]:SQL>ed

    Gravou file afiedt.buf

      1  DECLARE

      2      CURSOR SEE_AUTOR IS SELECT NM_AUTOR FROM T_AU7_AUTOR; -- ABERTURA DO CURSOR - INFORMANDO SER UM SELECT

      3      SEE_AUT SEE_AUTOR%ROWTYPE; -- SEE_AUT = Variável SEE_AUTOR = CURSOR

      4  BEGIN

      5     OPEN SEE_AUTOR;

      6     LOOP

      7        FETCH SEE_AUTOR INTO SEE_AUT;

      8        DBMS_OUTPUT.PUT_LINE('NOME DO AUTOR: ' ||SEE_AUT.NM_AUTOR);

      9        EXIT WHEN SEE_AUTOR%NOTFOUND;

    10     END LOOP;

    11     CLOSE SEE_AUTOR; -- FECHAMENTO DO CURSOR

    12* END;

    [email protected]:SQL>/

    NOME DO AUTOR: JOAO

    NOME DO AUTOR: JOSE

    NOME DO AUTOR: JOSE

    Procedimento PL/SQL concluído com sucesso.

    [email protected]:SQL>

    ==> aí nós INCLUSIVE enxergamos teu ERRO DE LÓGICA, que é fazer a última linha ser impressa 2x pela posição errada do EXIT, mas essa é outra história... Respondido ?? Erro de dedinhos gordos digitando algo impróprio, só isso ....

    Abraços,

      Chiappa