Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Akropol

Update em Procedure - Erro

Recommended Posts

Olá Pessoal estou com um problema. :wacko:

 

É o seguinte tenho uma procedure que tem varios cursores, e tenho uma tabela para caso apresente erros eu atualizo essa tabela, com isso tenho controle onde deu o erro.

 

Só que faço, o insert da tabela, depois de tal cursor precisaria atualizar a tabela, não sei se faço fpra ou dentro do cursor:

Segue o uma parte do código abaixo:

 

 

vfase_status := 'Inicio do programa';vfase := 'em andamento';vfase_notes := ' ';vbatch_execution_dt := sysdate;/*for exec in execution looploop_execution := (execution_id + 1);*//*	cursor execution */open execution;loopfetch execution into loop_execution;EXIT WHEN execution%NOTFOUND;loop_execution_v := loop_execution + 1;end loop;close execution;insert into batch_execution	(execution_id, process_id , execution_dt ,  fase , status , records, notes ) values	(loop_execution_v, 'TM001' , vbatch_execution_dt ,  vfase , vfase_status , 0, vfase_notes );commit;/*	cursor batchexecutionid */for vbatch in batchexecutionid loopvbatch_execution_id := (vbatch.execution_id);end loop;commit;/*	cursor ler */for l in ler loopultimacampanha := (l.last_one);end loop;commit;vfase_status := 'Erro ao criar campanha';vfase_notes := ' ';update batch_execution	set 	status	= vfase_status,		notes	= vfase_notes	where	execution_id	= vbatch_execution_id;commit;Não sei se a implementação está correta?A procedure é criada, só que quando tento executa-lá emite a menssagem:
ERRO na linha 1:

ORA-01401: inserted value too large for column

ORA-06512: at "AXENT.LEITURACAMPANHAS", line 117

ORA-06512: at line 1

 

Abraço !

 

Marcelo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Algum dado que você esta tentando incluir na tabela batch_execution é maior do que a coluna cadastrada no banco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então na verdade não deveria, porque quando eu inicializo o batch_execution:

 

insert into batch_execution	(execution_id, process_id , execution_dt ,  fase , status , records, notes ) values	(loop_execution_v, 'TM001' , vbatch_execution_dt ,  vfase , vfase_status , 0, vfase_notes );commit;
executando a procedure dessa forma roda legal, só que quando faço um update:

 

vfase_status := 'Erro ao criar campanha';vfase_notes := ' ';update batch_execution	set	 status	= vfase_status,		notes	= vfase_notes	where	execution_id	= vbatch_execution_id;commit;
a procedure emite a mensagem:

 

ORA-01401: inserted value too large for column

ORA-06512: at "AXENT.LEITURACAMPANHAS", line 117

ORA-06512: at line 1

 

então não sei se de alguma forma no update ela está fazendo um loop e carregando varias vezes a variavel status com o valor de vfase_status, e também não sei se pode ser feito dessa forma, porque quando inicializei lá em cima o batch_execution o valor da vairavel b]vfase_status[/b era outro, e agora precisaria de outro valor.

 

Outra coisa que já tentei é colacar o update na dentro do cursor ler é quando ponho a as duas variaveis de trabalho é emitdo a mesma mensagem.

 

Obrigado.

 

Marcelo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como tu declarou vfase_status, vfase, vfase_notes, vbatch_execution_dt ??Tens como postar toda a procedure??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue:

 

create or replace procedure LeituraCampanhas isvcod_mala_direta v_eCrm_campanhas.cod_mala_direta%type;vdes_mala_direta v_eCrm_campanhas.des_mala_direta%type;vdat_envio  v_eCrm_campanhas.dat_envio%type;vdat_validade  v_eCrm_campanhas.dat_validade%type;vind_aniversario V_eCrm_campanhas.ind_aniversario%type;vcod_mala_direta_2 V_eCrm_campanhas_clientes.cod_mala_direta%type;vcod_num_pfj V_eCrm_campanhas_clientes.num_pfj%type;vcod_cod_estabelecimento V_eCrm_campanhas_clientes.cod_estabelecimento%type;vdata_atual_sis  date := trunc(sysdate);vfase   varchar2(020);vfase_status  varchar2(500);vfase_notes  varchar2(250);vb script:Campamha:' || x.campaign_id || 'Descriçãp:' || 'Previsão de:' || x.plan_start_dt || 'Até:' || x.plan_end_dt;/*	cursor u_update */for y in u_update loopvnotify_id := (y.last_one + 1);  update counter set last_one = vnotify_id  where item = 'notify6.notify_id';  commit; insert into notify6( notify_id , notify_dt , notification_type, sendto_address , object_table ,  subject , message , server_name , change_uid , change_dt )   values ( vnotify_id , sysdate, 'M' , 'teste@teste' , 'batch_execution' ,	'NOVA CAMPANHA DE TELEMARKETING' , vmessage , 'System Server' , 'TM001' , sysdate );	commit;	   end loop;  	end loop;	         /*	cursor registro_tmk */ for t in registro_tmk loop 	  /*	cursor tipo_resultado */	for ti in tipo_resultado loopinsert into tmk_telemarketing(campaign_id, Resultado_id, resultado_desc, state, status, prbtmk_status_sas, prbtmk_pfj, prbtmk_cod_estabelecimento,logged_dt,logged_by, Change_dt , Change_uid)	  values (t.cod_mala_direta, 01, ti.descricao, 'Não atrubuída', ti.status, ti.status_sas, t.num_pfj, t.cod_estabelecimento,sysdate, 'PRMTMK_01', sysdate, 'PRBTMK_01'); commit;  end loop;  end loop;       update sa_campaign set prbtmk_tot_cli_lista = (select count(*) from tmk_telemarketing) where campaign_id = sa_campaign.campaign_id and sa_campaign.campaign_id > ultimacampanha;  commit;  update counter set last_one = (select max(sa_campaign.campaign_id) from sa_campaign)  where counter.item = 'sa_campaign.campaign_id';  commit;  end;/

Marcelo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu acho que você postou outra procedure, esta muito diferente do código que você postou no seu primeiro post.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Descupa ai não colou corretamente, segue:

 

create or replace procedure LeituraCampanhas isvcod_mala_direta v_eCrm_campanhas.cod_mala_direta%type;vdes_mala_direta v_eCrm_campanhas.des_mala_direta%type;vdat_envio  v_eCrm_campanhas.dat_envio%type;vdat_validade  v_eCrm_campanhas.dat_validade%type;vind_aniversario V_eCrm_campanhas.ind_aniversario%type;vcod_mala_direta_2 V_eCrm_campanhas_clientes.cod_mala_direta%type;vcod_num_pfj V_eCrm_campanhas_clientes.num_pfj%type;vcod_cod_estabelecimento V_eCrm_campanhas_clientes.cod_estabelecimento%type;vdata_atual_sis  date := trunc(sysdate);vfase   varchar2(020);vfase_status  varchar2(500);vfase_notes  varchar2(250);vb script:Campamha:' || x.campaign_id || 'Descriçãp:' || 'Previsão de:' || x.plan_start_dt || 'Até:' || x.plan_end_dt;/*	cursor u_update */for y in u_update loopvnotify_id := (y.last_one + 1);  update counter set last_one = vnotify_id  where item = 'notify6.notify_id';  commit; insert into notify6( notify_id , notify_dt , notification_type, sendto_address , object_table ,  subject , message , server_name , change_uid , change_dt )   values ( vnotify_id , sysdate, 'M' , 'teste@teste' , 'batch_execution' ,	'NOVA CAMPANHA DE TELEMARKETING' , vmessage , 'System Server' , 'TM001' , sysdate );	commit;	   end loop;  	end loop;	         /*	cursor registro_tmk */ for t in registro_tmk loop 	  /*	cursor tipo_resultado */	for ti in tipo_resultado loopinsert into tmk_telemarketing(campaign_id, Resultado_id, resultado_desc, state, status, prbtmk_status_sas, prbtmk_pfj, prbtmk_cod_estabelecimento,logged_dt,logged_by, Change_dt , Change_uid)	  values (t.cod_mala_direta, 01, ti.descricao, 'Não atrubuída', ti.status, ti.status_sas, t.num_pfj, t.cod_estabelecimento,sysdate, 'PRMTMK_01', sysdate, 'PRBTMK_01'); commit;  end loop;  end loop;       update sa_campaign set prbtmk_tot_cli_lista = (select count(*) from tmk_telemarketing) where campaign_id = sa_campaign.campaign_id and sa_campaign.campaign_id > ultimacampanha;  commit;  update counter set last_one = (select max(sa_campaign.campaign_id) from sa_campaign)  where counter.item = 'sa_campaign.campaign_id';  commit;  end;/

Mais uma vez !!!!! :angry:

 

create or replace procedure LeituraCampanhas isvcod_mala_direta v_eCrm_campanhas.cod_mala_direta%type;vdes_mala_direta v_eCrm_campanhas.des_mala_direta%type;vdat_envio  v_eCrm_campanhas.dat_envio%type;vdat_validade  v_eCrm_campanhas.dat_validade%type;vind_aniversario V_eCrm_campanhas.ind_aniversario%type;vcod_mala_direta_2 V_eCrm_campanhas_clientes.cod_mala_direta%type;vcod_num_pfj V_eCrm_campanhas_clientes.num_pfj%type;vcod_cod_estabelecimento V_eCrm_campanhas_clientes.cod_estabelecimento%type;vdata_atual_sis  date := trunc(sysdate);vfase   varchar2(020);vfase_status  varchar2(500);vfase_notes  varchar2(250);vb script:Campamha:' || x.campaign_id || 'Descriçãp:' || 'Previsão de:' || x.plan_start_dt || 'Até:' || x.plan_end_dt;/*	cursor u_update */for y in u_update loopvnotify_id := (y.last_one + 1);  update counter set last_one = vnotify_id  where item = 'notify6.notify_id';  commit; insert into notify6( notify_id , notify_dt , notification_type, sendto_address , object_table ,  subject , message , server_name , change_uid , change_dt )   values ( vnotify_id , sysdate, 'M' , 'teste@teste' , 'batch_execution' ,	'NOVA CAMPANHA DE TELEMARKETING' , vmessage , 'System Server' , 'TM001' , sysdate );	commit;	   end loop;  	end loop;	         /*	cursor registro_tmk */ for t in registro_tmk loop 	  /*	cursor tipo_resultado */	for ti in tipo_resultado loopinsert into tmk_telemarketing(campaign_id, Resultado_id, resultado_desc, state, status, prbtmk_status_sas, prbtmk_pfj, prbtmk_cod_estabelecimento,logged_dt,logged_by, Change_dt , Change_uid)	  values (t.cod_mala_direta, 01, ti.descricao, 'Não atrubuída', ti.status, ti.status_sas, t.num_pfj, t.cod_estabelecimento,sysdate, 'PRMTMK_01', sysdate, 'PRBTMK_01'); commit;  end loop;  end loop;       update sa_campaign set prbtmk_tot_cli_lista = (select count(*) from tmk_telemarketing) where campaign_id = sa_campaign.campaign_id and sa_campaign.campaign_id > ultimacampanha;  commit;  update counter set last_one = (select max(sa_campaign.campaign_id) from sa_campaign)  where counter.item = 'sa_campaign.campaign_id';  commit;  end;/

:angry: :angry:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eduardo, cara resolvi o problema, erro de estagiario.

 

O campo que recebia status era apenas de varchar2 (20),eu não criei a tabela e não verifiquei.

 

Enfim problema resolvido, mas me fala como postar um código grande? ;) e na ultimo post eu divide em varias partes e não foi também, como resolver esse problema? :blink: :D

 

Valeu galera !!!

 

Abraço. http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.