Ajuda - Erro

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

Apresenta esse erro nessa procedure - não sei mais o que pode ser

ERROR at line 1:
ORA-00979: not a GROUP BY expression
ORA-06512: at "FINEMPDBS.PRC_EMPRESTIMO_GF", line 13
ORA-06512: at line 1

Código :

Selecionar tudo

CREATE OR REPLACE PROCEDURE prc_emprestimo_gf

IS 
   v_con_num_est      NUMBER (14, 4);
   v_data             NUMBER (8); 
   v_principal_pago   NUMBER (14, 4); 
   v_juros_pago       NUMBER (14, 4); 
   v_mora_paga        NUMBER (14, 4); 
   v_iof_pago         NUMBER (14, 4); 
   v_multa_paga       NUMBER (14, 4); 
   v_arquivo          UTL_FILE.file_type; 
BEGIN 
   SELECT   c.con_num_est, 
            TO_CHAR (t.pgt_dat, 'dd/mm/yyyy'), 
            SUM (t.ppcvalpriantpgt - t.ppcvalpripospgt), 
            SUM (t.ppcvaljurantpgt - t.ppcvaljurpospgt), 
            SUM (t.ppcvalmorantpgt - t.ppcvalmorpospgt), 
            SUM (t.ppcvaliofantpgt - t.ppcvaliofpospgt), 
            SUM (t.ppcvalmulantpgt - t.ppcvalmulpospgt)
       INTO v_con_num_est, 
      v_data,
      v_principal_pago, 
      v_juros_pago, 
      v_mora_paga, 
      v_iof_pago, 
      v_multa_paga            
       from   emptblppc t, tb_con c, tb_pgt p 
      WHERE t.con_num = c.con_num 
        AND t.ppcdthalt = c.con_dat_alt 
        AND t.con_num = p.con_num 
        AND t.ppcdthalt = p.pgt_dat_alt 
        AND t.pgt_dat = p.pgt_dat 
        AND t.ppcdthalt = TO_DATE ('01-01-1960','DD-MM-YYYY')
        AND p.DATA = TO_DATE ('23-12-2007','DD-MM-YYYY')
   GROUP BY c.con_num_est, TO_DATE (t.pgt_dat, 'dd/mm/yyyy');

   v_arquivo := UTL_FILE.fopen ('/backup/CPMF', 'EMPRESTIMO_GF.CSV', 'W'); 
   UTL_FILE.put_line (v_arquivo, 'v_con_num_est    : '||NVL (v_con_num_est, 0));
   UTL_FILE.put_line (v_arquivo, 'v_data           : '||NVL (v_data, 0)); 
   UTL_FILE.put_line (v_arquivo, 'v_principal_pago : '||NVL (v_principal_pago, 0)); 
   UTL_FILE.put_line (v_arquivo, 'v_juros_pago     : '||NVL (v_juros_pago, 0)); 
   UTL_FILE.put_line (v_arquivo, 'v_mora_paga      : '||NVL (v_mora_paga, 0)); 
   UTL_FILE.put_line (v_arquivo, 'v_iof_pago       : '||NVL (v_iof_pago, 0)); 
   UTL_FILE.put_line (v_arquivo, 'v_multa_paga     : '||NVL (v_multa_paga, 0)); 
   UTL_FILE.fclose   (v_arquivo); 
END;
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Esse problema é por causa da diferença que existe no seu select,
no começo dele você utiliza o TO_CHAR e no group by você utiliza o TO_DATE, você poderia mudar o group by, deixando com o TO_CHAR também.

[]'s
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

Agora, aparece :

ERRO na linha 1:
ORA-01403: no data fo
ORA-06512: at "FINEMP
mariogus
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 157
Registrado em: Sex, 30 Nov 2007 1:17 pm
Localização: Porto Alegre - RS

*
ERRO na linha 1:
ORA-01403: no data found
ORA-06512: at "FINEMPDBS.PRC_EMPRESTIMO_GF", line 13
ORA-06512: at line 1
Tineks
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 365
Registrado em: Ter, 24 Mai 2005 2:24 pm
Localização: Araraquara - SP
Cristiano (Tineks)
Araraquara - SP

Essa mensagem é exibida pois sua consulta não achou registro nenhum.

Tem um detalhe ai.. nessa sua consulta você está atribuindo o valor do select diretamente nas variaveis através do "INTO".... nesse caso você tem q tomar cuidado em 2 situações, a primeira é nesse caso onde não encontrou nenhum registro, e no segundo caso é a possibilidade de encontrar mais de um registro, dessas duas formas vai dar erro na sua procedure. Vou colocar abaixo as formas que você pode tratar esses 2 erros.

Selecionar tudo

BEGIN
   SELECT ...
     INTO ...
    WHERE ...
EXCEPTION
   WHEN NO_DATA_FOUND THEN   -- vai cair aqui caso não tenha encontrado nenhum registro
      dbms_output.put_line('não encontrou nenhum registro.');
   WHEN TOO_MANY_ROWS THEN   -- vai cair aqui caso tenha encontrado mais de um registro
      dbms_output.put_line('Encontrou mais de um registro. ');
   WHEN OTHERS THEN          -- caso não seja nenhum dos erros acima vai cair aqui...
      dbms_output.put_line('Erro desconhecido : '||SQLERRM);
END;
[]'s
Hahu
Rank: Analista Sênior
Rank: Analista Sênior
Mensagens: 147
Registrado em: Qui, 16 Mar 2006 11:26 am
Localização: São Paulo
O mundo gira muito!!

Bom dia mariogus,

Td bom com você?

Então... verifique tb o recebimento da variavel v_data, se ele está recebendo 8 caracteres ou 10 caracteres..!!

Qualquer coisas, posta aqui no forum!!

Abs Hahu
Responder
  • Informação
  • Quem está online

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