Ajuda - Erro

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Qui, 03 Jan 2008 4:15 pm

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 :
Código: Selecionar todos
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;
mariogus
Localização: Porto Alegre - RS

Mensagemem Qui, 03 Jan 2008 4:22 pm

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
Tineks
Localização: Araraquara - SP

Cristiano (Tineks)
Araraquara - SP

Mensagemem Qui, 03 Jan 2008 4:29 pm

Agora, aparece :

ERRO na linha 1:
ORA-01403: no data fo
ORA-06512: at "FINEMP
mariogus
Localização: Porto Alegre - RS

Mensagemem Qui, 03 Jan 2008 4:30 pm

*
ERRO na linha 1:
ORA-01403: no data found
ORA-06512: at "FINEMPDBS.PRC_EMPRESTIMO_GF", line 13
ORA-06512: at line 1
mariogus
Localização: Porto Alegre - RS

Mensagemem Qui, 03 Jan 2008 4:43 pm

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.

Código: Selecionar todos
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
Tineks
Localização: Araraquara - SP

Cristiano (Tineks)
Araraquara - SP

Mensagemem Sex, 04 Jan 2008 7:53 am

Bom dia mariogus,

Td bom com você?

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

Qualquer coisas, posta aqui no forum!!

Abs Hahu
Hahu
Localização: São Paulo

O mundo gira muito!!



Voltar para SQL

Quem está online

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