Help - Procedure

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
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

Pessoal, preciso de ajuda..apresenta um erro na hora de compilar.

LINE/COL ERROR
-------- -----------------------------------------------------------------
17/4 PL/SQL: SQL Statement ignored
30/8 PL/SQL: ORA-00947: not enough values

Selecionar tudo

CREATE OR REPLACE PROCEDURE prc_emprestimo_gf ( 
   prc_con_num_est      OUT   NUMBER, 
   prc_principal_pago   OUT   NUMBER, 
   prc_juros_pago       OUT   NUMBER, 
   prc_mora_paga        OUT   NUMBER, 
   prc_iof_pago         OUT   NUMBER, 
   prc_multa_paga       OUT   NUMBER 
) 
IS 
   v_con_num_est      NUMBER (14, 4); 
   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_linha            VARCHAR2 (2000)    := ''; 
   v_arquivo          UTL_FILE.file_type; 
BEGIN 
   SELECT   c.con_num_est, TO_DATE (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_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 = '01 jan 1960' 
        AND TO_CHAR (p.DATA, 'DD-MM-YYYY') = '23-11-2007' 
   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_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;
/
Avatar do usuário
madmax
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 293
Registrado em: Qua, 13 Dez 2006 5:02 pm
Localização: São Paulo
Contato:

Caro amigo mariogus

Este erro e o seguinte cara:

ORA-00947 não há valores suficientes

Causa: Este erro ocorre quando uma instrução SQL requer dois conjuntos de valores iguais em número, mas o segundo conjunto contém menos itens do que o primeiro. Isto pode ocorrer em uma cláusula WHERE ou HAVING na qual um SELECT aninhado retorna poucas colunas, como em
WHERE (A,B) IN (SELECT C FROM ...)

Outra causa comum deste erro é uma instrução INSERT na qual a cláusula VALUES ou SELECT não contenha valores suficientes necessários para INSERT, como em

INSERT INTO EMP(EMPNO,ENAME) VALUES('JONES')
Ação: Verifique o número de itens em cada conjunto e altere a instrução SQL de modo a torná-los iguais.

Resumindo você esta trazendo no select 7 colunas e esta tentando inserir somente 6 colunas.

Espero ter ajudado. :wink:

Madmax.
romulozaf
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 7
Registrado em: Qui, 13 Dez 2007 8:58 am
Localização: Belém - PA
Rômulo Fernandes

:?: Alguém pode ir no tópico EXECUTAR PROCEDURE SEMANALMENTE e me ajudar na dificuldade que estou tendo?
Obrigado pela atenção!
Responder
  • Informação
  • Quem está online

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