Akropol 0 Denunciar post Postado Agosto 8, 2006 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
NaPraia 12 Denunciar post Postado Agosto 9, 2006 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
Akropol 0 Denunciar post Postado Agosto 9, 2006 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
NaPraia 12 Denunciar post Postado Agosto 9, 2006 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
Akropol 0 Denunciar post Postado Agosto 9, 2006 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
NaPraia 12 Denunciar post Postado Agosto 9, 2006 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
Akropol 0 Denunciar post Postado Agosto 9, 2006 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
Akropol 0 Denunciar post Postado Agosto 9, 2006 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
alphamek 2 Denunciar post Postado Agosto 14, 2006 http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif Compartilhar este post Link para o post Compartilhar em outros sites