Alguns erros q não consigo identificar

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
fabio.nascimento
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Sex, 22 Set 2006 10:52 am
Localização: Osasco

Pessoal,

Boa tarde, primeiramente gostaria de salientar q sou novato em banco de dados, estou aprendendo bastante e pra variar me apaixonando.

Não possuo experiencia suficiente para decifrar as mensagens de erros emitidas pelo oracle, dessa forma solicito a ajuda dos companheitos.

Obs: Acredito que meu erro se resuma a Begins e Ends da vida, mas ainda apanho no que diz respeito a inicio e fim de bloco de execução.

Segue abaixo minha procedure + erro relatado.

Selecionar tudo


CREATE OR REPLACE PROCEDURE SP_REL_TAREFA4( P_DATA IN DATE ) 

AS 

CURSOR ENTRADA_RECLAMACAO ( P_DATA IN DATE ) IS 

  -- Fila de reclamacao 
  SELECT IDENTIFICACAO, DESCRICAO, COD_DESCRICAO, QUANTIDADE 
  FROM 
  ( 
  SELECT '1' IDENTIFICACAO, 
         RTRIM(TTR.VARDSCTIPORECLAMACAO) DESCRICAO, 
         TTR.NUMIDTIPORECLAMACAO, 
         COUNT  (TP.NUMIDPROCESSO) QUANTIDADE 
  FROM   TBPROCESSOS TP, 
         TBPROCESSOSRECLAMACAO TPR, 
         TBTIPORECLAMACAO TTR 
  WHERE  TP.NUMIDPROCESSO = TPR.NUMIDPROCESSO 
  AND    TPR.NUMIDTIPORECLAMACAO = TTR.NUMIDTIPORECLAMACAO 
  AND    TP.FLGTIPOPROCESSO = 'R' 
  AND    TP.DATABERTURA >= TO_DATE( TO_CHAR((TRUNC(FU_RECUPERA_PERIODO(P_DATA, 1))),'DD/MM/YYYY')||' 00:00:00','DD/MM/YYYY HH24:MI:SS') 
  AND    TP.DATABERTURA <= TO_DATE( TO_CHAR((TRUNC(FU_RECUPERA_PERIODO(P_DATA, 2))),'DD/MM/YYYY')||' 23:59:59','DD/MM/YYYY HH24:MI:SS') 
  GROUP BY TTR.VARDSCTIPORECLAMACAO 
  ); 


  E ENTRADA_RECLAMACAO%ROWTYPE; 

  P_PROCESSOS_DESCRICAO          VARCHAR2(200); 
  P_PROCESSOS_DESCRICAO_COD   NUMBER; 
  P_PROCESSOS_TOT             NUMBER; 
  P_IDENTIFICACAO             VARCHAR2(1);  
  --P_PROCESSOS_PRODUTO         VARCHAR2(200); 
  --P_PROCESSOS_PRODUTOQTD      NUMBER; 
  
  FILE_PATH         VARCHAR2(100) := '/spa/relatorios'; 
  FILE_HANDLE        UTL_FILE.FILE_TYPE; 
  W_LINHA           VARCHAR2(300); 
  W_TRACO0          VARCHAR2(170) := LPAD ( ' ', 170, ' ' ); 
  W_TRACO1          VARCHAR2(170) := LPAD ( ' ', 170, '-' ); 
  W_TRACO2          VARCHAR2(170) := LPAD ( ' ', 170, '=' );      
  W_CONTACARACTER   NUMBER; 

  
  
BEGIN 

  W_CONTACARACTER             :=0; 
  
  FILE_HANDLE := UTL_FILE.FOPEN ( FILE_PATH, 'REL_TAREFA4.TXT', 'w' ); 
  W_LINHA := 'Relatorio consolidado por fila de reclamacao '||LPAD ( ' ', 80, ' ' )|| 
           to_char(sysdate,'DD/MM/YYYY HH24:MI:SS'); 
  
  UTL_FILE.PUT_LINE ( FILE_HANDLE, W_LINHA ); 
  UTL_FILE.PUT_LINE ( FILE_HANDLE, W_TRACO2 ); 
  UTL_FILE.PUT_LINE(FILE_HANDLE, ''); 
  
  W_LINHA := 'Fila de reclamacao '||LPAD ( ' ', 80, ' ' )|| 'Produto' ||LPAD ( ' ', 25, ' ' )||'Core'||LPAD ( ' ', 10, ' ' )||'Total por reclamacao';    
  UTL_FILE.PUT_LINE ( FILE_HANDLE, W_LINHA ); 
  UTL_FILE.PUT_LINE ( FILE_HANDLE, W_TRACO1 ); 
  --UTL_FILE.PUT_LINE(FILE_HANDLE, ''); 

  P_PROCESSOS_TOT             :=0; 
  
      FOR E IN ENTRADA_RECLAMACAO (P_DATA) 
      LOOP 
      
      P_PROCESSOS_DESCRICAO     := E.DESCRICAO; 
      P_PROCESSOS_TOT           := E.QUANTIDADE; 
      P_IDENTIFICACAO           := E.IDENTIFICACAO; 
      P_PROCESSOS_DESCRICAO_COD := E.COD_DESCRICAO; 
      
      W_CONTACARACTER := 155 - LENGTH(P_PROCESSOS_DESCRICAO); 
      
      W_LINHA  := P_PROCESSOS_DESCRICAO ||LPAD ( ' ', W_CONTACARACTER, ' ' )||P_PROCESSOS_TOT; 
      UTL_FILE.PUT_LINE ( FILE_HANDLE, W_LINHA ); 
      
          --Colocar aqui uma nova busca filtrando produto por reclamacao 
          --inicia Cursor para os produtos por reclamacao 
          
          CURSOR RECLAMACAO_PRODUTO ( P_PROCESSOS_DESCRICAO_COD IN NUMBER ) IS 
          
          -- Fila de reclamacao 
          SELECT IDENTIFICACAO, DESCRICAO, QUANTIDADE 
          FROM 
          ( 
          SELECT '2' IDENTIFICACAO, 
                  RTRIM(TPR.VARDSCPRODUTO) DESCRICAO, 
                  COUNT(TP.NUMIDPRODUTO) QUANTIDADE 
          FROM    TBPROCESSOS TP,    
                  TBPRODUTOS TPR, 
                  TBPROCESSOSRECLAMACAO TPROCR, 
                  TBTIPORECLAMACAO TTR 
          WHERE   TP.NUMIDPRODUTO = TPR.NUMIDPRODUTO 
          AND     TP.NUMIDPROCESSO = TPROCR.NUMIDPROCESSO 
          AND     TPROCR.NUMIDTIPORECLAMACAO = TTR.NUMIDTIPORECLAMACAO 
          AND     TTR.NUMIDTIPORECLAMACAO = P_PROCESSOS_DESCRICAO_COD 
          AND     TP.DATABERTURA >= TO_DATE( TO_CHAR((TRUNC(FU_RECUPERA_PERIODO(P_DATA, 1))),'DD/MM/YYYY')||' 00:00:00','DD/MM/YYYY HH24:MI:SS') 
          AND     TP.DATABERTURA <= TO_DATE( TO_CHAR((TRUNC(FU_RECUPERA_PERIODO(P_DATA, 2))),'DD/MM/YYYY')||' 23:59:59','DD/MM/YYYY HH24:MI:SS') 
          GROUP BY TPR.VARDSCPRODUTO 
          ); 
          
          R RECLAMACAO_PRODUTO%ROWTYPE; 
          
          
          W_CONTACARACTER             :=0; 
          
          --P_PROCESSOS_TOT             :=0; 
          

              FOR R IN RECLAMACAO_PRODUTO (P_PROCESSOS_DESCRICAO_COD) 
              LOOP 
              
              P_PROCESSOS_DESCRICAO     := R.DESCRICAO; 
              P_PROCESSOS_TOT           := R.QUANTIDADE; 
              P_IDENTIFICACAO           := R.IDENTIFICACAO; 
              
              --Impressao 
              W_CONTACARACTER := 155 - LENGTH(P_PROCESSOS_DESCRICAO); 
              
              W_LINHA  := P_PROCESSOS_DESCRICAO ||LPAD ( ' ', W_CONTACARACTER, ' ' )||P_PROCESSOS_TOT; 
              UTL_FILE.PUT_LINE ( FILE_HANDLE, W_LINHA );                            
              
              P_PROCESSOS_TOT         := 0; 
              END LOOP;  
          
      P_PROCESSOS_TOT         := 0; 
      END LOOP; 
  UTL_FILE.FCLOSE ( FILE_HANDLE ); 
END SP_REL_TAREFA4;


Erro emitido pelo oracle

Selecionar tudo


Type PROCEDURE 
Owner SPATST 
Name SP_REL_TAREFA4 
Line Error text 
81 PLS-00103: Encountered the symbol "RECLAMACAO_PRODUTO" when expecting one of the following: 

   := . ( @ % ; 
The symbol ":=" was substituted for "RECLAMACAO_PRODUTO" to continue. 
  
81 PLS-00103: Encountered the symbol "SELECT" when expecting one of the following: 

   . ( * % & = - + ; < / > in mod not rem an exponent (**) 
   <> or != or ~= >= <= <> and or like between is null is not || 
  
106 PLS-00103: Encountered the symbol "=" when expecting one of the following: 

   constant exception <an identifier> 
   <a double-quoted delimited-identifier> table LONG_ double 


Desde já agradeço qualquer dica, as vezes dar o peixe não é o foco deste fórum dessa forma quero realmente aprender ou seja quero pescar.

Valeu pelas dicas.


Fabio Nascimento
Avatar do usuário
TBou
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 136
Registrado em: Qui, 05 Ago 2004 9:33 am
Localização: Campo Grande - MS
Thiago Bourscheidt
thiago.info@apoiorural.com.br
Analista de Sistemas

Bom Dia...Primeiramente seja bem vindo ao Oracle

Seguinte no meio do seu codigo você esta fazendo uma declaração de um Cursor RECLAMACAO_PRODUTO
isso esta errado....você deve colocar a declaração antes do begin...como fez com o outro cursor.



até mais.
fabio.nascimento
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Sex, 22 Set 2006 10:52 am
Localização: Osasco

Valeu TBou

Mas fiz o seguinte,

Coloquei um cursor em sequencia ao outro parametrizando cada um e depois abri um dentro do outro, e deu certo.
Valeu mesmo, estou apanhando feio do oracle rsrsrsrs

Muito obrigado pela atençao


Fabio Nascimento
erthal
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 130
Registrado em: Seg, 22 Nov 2004 1:45 pm
Localização: Niterói - RJ
Gustavo Erthal Jr. | TRISCAL
...................................................
Rio de Janeiro | (21) 2507-2010
São Paulo | (11) 3167-0526
www.triscal.com.br

Fabio,

Caro amigo, como você eu tb apanhei um pouco para identificar e conseguir entender algumas msg de erro do Oracle.

Existe um site, http://tahiti.oracle.com/, em que você escolhe a versão que está utilizando, e dentro dele você pode buscar o que quiser, msg de erro, syntax, dentre outros.

Dê uma olhada lá e boa sorte...

Abraços,
Gustavo.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante