Pessoal, tenho uma procedure, como podem ver logo abaixo, e estou com o
seguinte problema, quando ela executa via sqlplus, ela funciona
perfeitamente, porem quando eu coloco ela num job, ela da erro e não
executa, quando eu dou o comando exec dbms_job.run(numero job); ele da o
seguinte erro:

 

SQL> exec dbms_job.run(281);

BEGIN dbms_job.run(281); END;

 

*

ERRO na linha 1:

ORA-12011: a execução de 1 jobs falhou

ORA-06512: em "SYS.DBMS_IJOB", line 406

ORA-06512: em "SYS.DBMS_JOB", line 272

ORA-06512: em line 1

 

 

Aparentemente seria a variável v_msg varchar(30000), porém o grande lance é
que quando eu executo pelo sqlplus ele funciona perfeitamente, alguém
saberia me responder aonde eu estou errando ??

 

Ah, e no trace do banco ele da a seguinte mensagem quando executa o job:

 

 

Errors in file
c:\oracle\product\10.2.0\admin\adtc2\bdump\adtc2_j000_2488.trc:

ORA-12012: erro ao executar automaticamente o job 282

ORA-06502: PL/SQL: erro: buffer de string de caracteres pequeno demais
numérico ou de valor

ORA-06512: em "CARTECH.PALM_UTL", line 410

ORA-06512: em line 1

 

 

E outra coisa que notei é que tenho outras procedures com a mesma varialvel
e o mesmo tamanho, e não dão erros.

 

 

Segue abaixo a procedure:

 

 

 

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

procedure email_faturamento(p_emp  in ce_produtos.empresa%type

                  )

/*

|| Verifica se inclui firma por ser do grupo

*/

is

 

  cursor cr is

    select * from palm_pastas;

  

  cursor cr2(vnd palm_pastas.codigo%type) is

      select * from cd_firmas

       where vendedor = vnd;

       

  /************ Cursor Notas*********************************/

  cursor cr3(vnd palm_pastas.codigo%type) is

        select substr(firma,1,8) codigo, 

                   substr(cd_firmas_utl.nome(firma),1,28) Nome,

                   trunc(dt_emissao) data,

                   num_nota nota

          from ft_notas

                 where status   = 'A' and 

                 agente1 = vnd and

                 dt_emissao between to_char(to_char('01/'||
to_char(sysdate,'MM/RR')))  and last_day(sysdate)

                 and cod_oper = 119

                        order by data, num_nota;

  

  

  

   /************ Cursor Produtos de uma nota
*********************************/

    cursor cr5(nt ft_notas.num_nota%type) is

            select substr(produto,1,6) produto,

              substr(ce_produtos_utl.descricao(1,produto),1,28) descricao, 

                   (qtd * valor_unit) tot_p,

                   qtd,

                   valor_unit

                 from ft_itens_nf

                 where num_nota = nt;

  

  

  

  

  

  

  

  v_vencido number;

  v_qtd_vencido number;

  v_g1 cd_grupos.grupo%type;

  v_g2 cd_grupos.grupo%type;

  v_msg varchar2(32000);

  v_nomedest varchar2(50);

  v_nome varchar2(50);

  v_vence date;

  v_valor number(15,2);

  v_titulo number(9);

  v_situacao varchar2(20);

  v_totalped number(15,2);

  v_conta number;

begin

 

 

v_msg := '';

v_conta := 0; 

v_totalped := 0;

 

 for regemail in cr loop

 

   for regfirma in cr2(regemail.codigo) loop

     

     

     v_valor := 0;

     v_totalped := 0;

     v_msg := '****** Acompanhamento de faturamento *****' || '<br><br>';

  

       for regpedidos in cr3(regemail.codigo) loop

             

        v_conta := v_conta + 1;    

        v_msg := v_msg || '<b>' || rpad(regpedidos.nome,40,' ') ||
'</b><br>';

        v_msg := v_msg || '<b>Nota: ' || regpedidos.nota || '</b><br>';

        v_msg := v_msg || ' Data Emissão: ' ||
to_char(regpedidos.data,'DD/MM/RRRR') || '<br>';

        --raise_application_error(-20100, v_conta); 

      

         for regitens in cr5(regpedidos.nota) loop

  

            v_msg := v_msg || ' Codigo Produto: ' ||
rpad(regitens.produto,4,' ') || '<br> ' || rpad(regitens.descricao,30,' ')
|| '<br> ' || '  Qtde: ' || rpad(regitens.qtd,8,' ') || '<br>' || ' Valor
Un.: R$ ' || to_char(regitens.valor_unit,'999G999d00') || '<br>' || ' Total
Item: R$ ' || to_char(regitens.tot_p,'99999d00') || '<br>';

            v_valor := v_valor + regitens.tot_p;

         

         exit when length(v_msg) > 32000;

         

         end loop;

   

      v_msg := v_msg || '** Total Nota: R$ '  ||
to_char(v_valor,'999G999d00') || '<br><br>'; 

      v_totalped := nvl(v_totalped,0) + nvl(v_valor,0);

      v_valor := 0;

  exit when length(v_msg) > 32000;

      

  end loop;

  

  v_msg := v_msg || '** Total Acomp. faturamento:<b> R$ '  ||
to_char(v_totalped,'999G999d00') || '</b><br>'; 

  

 

  

  

  

  

  end loop;

  

  

  if v_conta > 0 then

          demo_mail.send_email('[EMAIL PROTECTED]',

                               regemail.email,

                               'Cartech: Acompanhamento de Faturamento',

                           v_msg);

  end if;

          

 

 v_nomedest := '';

 v_msg := '';

 v_conta := 0;

 v_totalped := 0;

 v_valor := 0;

 

 

 end loop;

 --RAISE_APPLICATION_ERROR(-20100, V_MSG);

  

end;

 

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



[As partes desta mensagem que não continham texto foram removidas]

Responder a