PAGUE 6 MESES
LEVE 12 MESES
GARANTIR DESCONTO

Fórum Ajuda URGENTE - PLSQL #410977

27/12/2011

0

Bom dia Pessoal,

Estou com este codigo abaixo, onde tento fazer dois inserts em tabelas diferentes scr_os e scr_it_os, Na tabela scr_os esta inserindo sem problemas, porem na outra tabela esta caindo na exception, alguem poderia me orientar?

Desde ja agradeco,
Darlis Pereira.

Segue abaixo o codigo:

declare
p_data_inicial date;
p_data_final date;
p_nr_os_proc number;
p_nr_itos_proc number;

/****************************************************
Criacao de Types
****************************************************/
type trecord_os is record(
nr_os_baan varchar2(12)
,companhia number
,cod_emitente varchar2(12)
,nro_os number
,local number
,dt_transacao date
,it_codigo varchar2(47)
,data_compra date
,garantia number
,data_abertura date
,serie_prod varchar2(60)
,estado_emitente varchar2(6)
,estado_cliente varchar2(6)
,data_fabric date
,cod_status number
,grupo_chamado varchar2(12)
,cd_unidade_fabril number(3));
type trecord_it_os is record(
nr_os_baan varchar2(12)
,cod_defeito varchar2(12)
,companhia number
,cod_emitente varchar2(12)
,local number
,dt_transacao date
,processado varchar2(1)
,cd_unidade_fabril number
,cd_grupo number
,id_defeito number);
type tb_os is table of trecord_os index by binary_integer;
type tb_it_os is table of trecord_it_os index by binary_integer;
v_os tb_os;
v_it_os tb_it_os;
/****************************************************
Criacao de Variaveis
****************************************************/
v_cont_os number;
v_cont_grupos number;
v_cont_erros number;
v_cont_conversor number;
v_cont_it_os number;
v_cd_unidade_fabril gnr_unidades_fabris.cd_unidade_fabril%type;
v_cd_grupo gnr_grupos_componentes.cd_grupo%type;
v_porcentagem sas_erros_carga_defeitos.nr_percentual%type;
v_num_registros number;
v_cont_alterado number;
v_cd_componente gnr_componentes.cd_componente%type;
v_cd_defeito sas_defeitos.cd_defeito%type;
v_conta number;
v_nr_ocorrencias number;
v_fl_status varchar2(1);
v_erro varchar2(300);
/****************************************************
Funcao que faz a validacao da tabela De/Para de erros
****************************************************/


--
begin


--
v_cont_erros := 0;
-- if fn_valida_de_para then
--
v_os.delete;
v_cont_os := 0;
v_cont_it_os := 0;
p_nr_os_proc := 0;
p_nr_itos_proc := 0;

p_data_inicial := to_date(01/10/2011,dd/mm/yyyy);
p_data_final := to_date(31/10/2011,dd/mm/yyyy);
--
for c_os in (select os.id_os nr_os_baan
,os.nr_os
,os.cd_sta cod_emitente
,2 elocal
,pag.dt_faturamento dt_transacao
,pro.cd_vib it_codigo
,rgp.dt_compra data_compra
,1 garantia
,os.dt_inclusao data_abertura
,rgp.cd_rg_produto serie_prod
,sta.cd_uf estado_emitente
,con.cd_uf estado_cliente
,rgp.dt_fabricacao data_fabricacao
,os.cd_status_os cod_status
,decode(os.id_tipo_nota_fiscal, C, 100, 200) grupo_chamado
,451 companhia
,pro.cd_unidade_fabril cd_unidade_fabril
from sas_os os
,sas_rg_produtos rgp
,gnr_produtos pro
,sas_sta sta
,sas_consumidores con
,sas_os_pagamentos opa
,sas_pagamentos pag
,sas_produtos_servicos pse
,sas_servicos ser
where os.id_os = 3187080
and pag.dt_faturamento between
to_date(to_char(p_data_inicial, DD/MM/YYYY) ||
00:00:00
,DD/MM/YYYY HH24:MI:SS) and
to_date(to_char(p_data_final, DD/MM/YYYY) ||
23:59:59
,DD/MM/YYYY HH24:MI:SS)
and os.cd_status_os in (4)
and pag.nr_serie_documento <> ND
and rgp.id_rg_produto = os.id_rg_produto
and sta.cd_sta = os.cd_sta
and con.id_consumidor = os.id_consumidor
and opa.id_os = os.id_os
and pag.id_pagamento = opa.id_pagamento
and pro.cd_unidade_fabril in (100, 400, 800, 900, 950)
and os.cd_sta <> 744
and pse.id_produto_servico = os.id_produto_servico
and ser.cd_servico = pse.cd_servico
and pro.id_produto = pse.id_produto
and ser.fl_onetouch = S
and not exists
(select 1
from sas_itens_os sio, gnr_componentes com
where sio.id_os = os.id_os
and com.id_componente = sio.id_componente
and com.cd_unidade_fabril = 999
and rownum < 2)
and exists
(select 1 from sas_itens_os sio, sas_defeitos def
where sio.id_os = os.id_os
and sio.id_defeito = def.id_defeito
and def.dt_final_vigencia > to_date(30/09/2011,dd/mm/yyyy)))
loop
--
v_os(v_cont_os).nr_os_baan := c_os.nr_os_baan;
v_os(v_cont_os).companhia := c_os.companhia;
v_os(v_cont_os).cod_emitente := c_os.cod_emitente;
v_os(v_cont_os).nro_os := c_os.nr_os_baan;
v_os(v_cont_os).local := c_os.elocal;
v_os(v_cont_os).dt_transacao := c_os.dt_transacao;
v_os(v_cont_os).it_codigo := c_os.it_codigo;
v_os(v_cont_os).data_compra := c_os.data_compra;
v_os(v_cont_os).garantia := c_os.garantia;
v_os(v_cont_os).data_abertura := c_os.data_abertura;
v_os(v_cont_os).serie_prod := c_os.serie_prod;
v_os(v_cont_os).estado_emitente := c_os.estado_emitente;
v_os(v_cont_os).estado_cliente := c_os.estado_cliente;
v_os(v_cont_os).data_fabric := c_os.data_fabricacao;
v_os(v_cont_os).cod_status := c_os.cod_status;
v_os(v_cont_os).grupo_chamado := c_os.grupo_chamado;
v_os(v_cont_os).cd_unidade_fabril := c_os.cd_unidade_fabril;
v_cont_os := v_cont_os + 1;
p_nr_os_proc := p_nr_os_proc + 1;

for c_it_os in (select sio.id_os nr_os_baan
,sio.id_componente id_componente
,sio.id_defeito id_defeito
from sas_itens_os sio
,gnr_componentes com
,sas_defeitos def
where sio.id_os = c_os.nr_os_baan
and com.id_componente = sio.id_componente
and def.id_defeito = sio.id_defeito)
loop
--
p_nr_itos_proc := p_nr_itos_proc + 1;

--
begin
select cd_defeito
into v_cd_defeito
from sas_defeitos
where id_defeito = c_it_os.id_defeito;
exception
when others then
v_cd_defeito := null;
end;
begin
select cd_componente
into v_cd_componente
from gnr_componentes
where id_componente = c_it_os.id_componente;
exception
when others then
v_cd_componente := null;
end;
if ((v_cd_componente is null) or (v_cd_defeito is null)) then
if v_cd_componente is null then
insert into sas_erros_carga_defeitos
(cd_unidade_fabril
,cd_grupo
,cd_defeito
,nr_percentual
,ds_situacao
,dt_atualizacao
,nm_atualizacao
,cd_sta
,nr_os)
values
(c_os.cd_unidade_fabril
,null
,c_it_os.id_defeito
,null
,ID_COMPONENTE: || c_it_os.id_componente ||
nao esta cadastrado na tabela GNR_COMPONENTES
,sysdate
,user
,c_os.cod_emitente
,c_os.nr_os);
v_cont_erros := v_cont_erros + 1;
end if;
if v_cd_defeito is null then
insert into sas_erros_carga_defeitos
(cd_unidade_fabril
,cd_grupo
,cd_defeito
,nr_percentual
,ds_situacao
,dt_atualizacao
,nm_atualizacao
,cd_sta
,nr_os)
values
(c_os.cd_unidade_fabril
,null
,c_it_os.id_defeito
,null
,ID_DEFEITO: || c_it_os.id_defeito ||
nao esta cadastrado na tabela SAS_DEFEITOS
,sysdate
,user
,c_os.cod_emitente
,c_os.nr_os);
v_cont_erros := v_cont_erros + 1;
end if;
elsif v_cont_grupos > 1 then

v_cont_erros := v_cont_erros + 1;

--
elsif v_cont_grupos = 0 then

v_cont_erros := v_cont_erros + 1;
--
else

v_it_os(v_cont_it_os).nr_os_baan := c_os.nr_os_baan;
v_it_os(v_cont_it_os).cod_defeito := null;
v_it_os(v_cont_it_os).companhia := c_os.companhia;
v_it_os(v_cont_it_os).cod_emitente := c_os.cod_emitente;
v_it_os(v_cont_it_os).local := c_os.elocal;
v_it_os(v_cont_it_os).dt_transacao := c_os.dt_transacao;
v_it_os(v_cont_it_os).processado := N;
v_it_os(v_cont_it_os).cd_unidade_fabril := v_cd_unidade_fabril;
v_it_os(v_cont_it_os).cd_grupo := v_cd_grupo;
v_it_os(v_cont_it_os).id_defeito := c_it_os.id_defeito;
--
v_cont_it_os := v_cont_it_os + 1;
--
end if;
--
end loop;
--
end loop;
--

--
if v_cont_erros = 0 then

delete scr_os@dl_crm_touch
where companhia = 451
and dt_transacao between p_data_inicial and p_data_final;
commit;
--
delete scr_it_os@dl_crm_touch
where companhia = 451
and dt_transacao between p_data_inicial and p_data_final;
commit;
--
for ddos in v_os.first .. v_os.last
loop
--
begin
insert into scr_os@dl_crm_touch
(u##nr_os_baan
,nr_os_baan
,u##cod_emitente
,cod_emitente
,nro_os
,local
,dt_transacao
,it_codigo
,data_compra
,garantia
,data_abertura
,serie_prod
,estado_emitente
,estado_cliente
,data_fabric
,cod_status
,grupo_chamado
,companhia
,progress_recid)
values
(upper(v_os(ddos).nr_os_baan)
,v_os(ddos).nr_os_baan
,upper(v_os(ddos).cod_emitente)
,v_os(ddos).cod_emitente
,v_os(ddos).nr_os_baan
,v_os(ddos).local
,v_os(ddos).dt_transacao
,v_os(ddos).it_codigo
,nvl(v_os(ddos).data_compra, v_os(ddos).data_abertura)
,v_os(ddos).garantia
,v_os(ddos).data_abertura
,v_os(ddos).serie_prod
,v_os(ddos).estado_emitente
,v_os(ddos).estado_cliente
,nvl(v_os(ddos).data_fabric, v_os(ddos).data_abertura)
,v_os(ddos).cod_status
,v_os(ddos).grupo_chamado
,v_os(ddos).companhia
,scr_os_seq.nextval@dl_crm_touch);
commit;
exception
when others then
null;
end;
--
end loop;
for dditos in v_it_os.first .. v_it_os.last
loop
--
begin
insert into scr_it_os@dl_crm_touch
(u##nr_os_baan
,nr_os_baan
,cod_emitente
,nro_os
,local
,dt_transacao
,u##cod_defeito
,cod_defeito
,companhia
,progress_recid)
values
(upper(v_it_os(dditos).nr_os_baan)
,v_it_os(dditos).nr_os_baan
,v_it_os(dditos).cod_emitente
,v_it_os(dditos).nr_os_baan
,v_it_os(dditos).local
,v_it_os(dditos).dt_transacao
,upper(v_it_os(dditos).cod_defeito)
,v_it_os(dditos).cod_defeito
,v_it_os(dditos).companhia
,scr_it_os_seq.nextval@dl_crm_touch);
commit;
exception
when others then
null;
end;
--
end loop;
--
end if;

exception
when others then
v_erro := substr(sqlerrm, 1, 300);
null;
end;
Darlis Pereira

Darlis Pereira

Responder

Posts

27/12/2011

Darlis Pereira

bom dia pessoal,

estou com este codigo abaixo, onde tento fazer dois inserts em tabelas diferentes scr_os e scr_it_os, na tabela scr_os esta inserindo sem problemas, porem na outra tabela esta caindo na exception, alguem poderia me orientar?

desde ja agradeco,
darlis pereira.

segue abaixo o codigo:

declare
p_data_inicial date;
p_data_final date;
p_nr_os_proc number;
p_nr_itos_proc number;

/****************************************************
criacao de types
****************************************************/
type trecord_os is record(
nr_os_baan varchar2(12)
,companhia number
,cod_emitente varchar2(12)
,nro_os number
,local number
,dt_transacao date
,it_codigo varchar2(47)
,data_compra date
,garantia number
,data_abertura date
,serie_prod varchar2(60)
,estado_emitente varchar2(6)
,estado_cliente varchar2(6)
,data_fabric date
,cod_status number
,grupo_chamado varchar2(12)
,cd_unidade_fabril number(3));
type trecord_it_os is record(
nr_os_baan varchar2(12)
,cod_defeito varchar2(12)
,companhia number
,cod_emitente varchar2(12)
,local number
,dt_transacao date
,processado varchar2(1)
,cd_unidade_fabril number
,cd_grupo number
,id_defeito number);
type tb_os is table of trecord_os index by binary_integer;
type tb_it_os is table of trecord_it_os index by binary_integer;
v_os tb_os;
v_it_os tb_it_os;
/****************************************************
criacao de variaveis
****************************************************/
v_cont_os number;
v_cont_grupos number;
v_cont_erros number;
v_cont_conversor number;
v_cont_it_os number;
v_cd_unidade_fabril gnr_unidades_fabris.cd_unidade_fabril%type;
v_cd_grupo gnr_grupos_componentes.cd_grupo%type;
v_porcentagem sas_erros_carga_defeitos.nr_percentual%type;
v_num_registros number;
v_cont_alterado number;
v_cd_componente gnr_componentes.cd_componente%type;
v_cd_defeito sas_defeitos.cd_defeito%type;
v_conta number;
v_nr_ocorrencias number;
v_fl_status varchar2(1);
v_erro varchar2(300);
/****************************************************
funcao que faz a validacao da tabela de/para de erros
****************************************************/


--
begin


--
v_cont_erros := 0;
-- if fn_valida_de_para then
--
v_os.delete;
v_cont_os := 0;
v_cont_it_os := 0;
p_nr_os_proc := 0;
p_nr_itos_proc := 0;

p_data_inicial := to_date(01/10/2011,dd/mm/yyyy);
p_data_final := to_date(31/10/2011,dd/mm/yyyy);
--
for c_os in (select os.id_os nr_os_baan
,os.nr_os
,os.cd_sta cod_emitente
,2 elocal
,pag.dt_faturamento dt_transacao
,pro.cd_vib it_codigo
,rgp.dt_compra data_compra
,1 garantia
,os.dt_inclusao data_abertura
,rgp.cd_rg_produto serie_prod
,sta.cd_uf estado_emitente
,con.cd_uf estado_cliente
,rgp.dt_fabricacao data_fabricacao
,os.cd_status_os cod_status
,decode(os.id_tipo_nota_fiscal, c, 100, 200) grupo_chamado
,451 companhia
,pro.cd_unidade_fabril cd_unidade_fabril
from sas_os os
,sas_rg_produtos rgp
,gnr_produtos pro
,sas_sta sta
,sas_consumidores con
,sas_os_pagamentos opa
,sas_pagamentos pag
,sas_produtos_servicos pse
,sas_servicos ser
where os.id_os = 3187080
and pag.dt_faturamento between
to_date(to_char(p_data_inicial, dd/mm/yyyy) ||
00:00:00
,dd/mm/yyyy hh24:mi:ss) and
to_date(to_char(p_data_final, dd/mm/yyyy) ||
23:59:59
,dd/mm/yyyy hh24:mi:ss)
and os.cd_status_os in (4)
and pag.nr_serie_documento <> nd
and rgp.id_rg_produto = os.id_rg_produto
and sta.cd_sta = os.cd_sta
and con.id_consumidor = os.id_consumidor
and opa.id_os = os.id_os
and pag.id_pagamento = opa.id_pagamento
and pro.cd_unidade_fabril in (100, 400, 800, 900, 950)
and os.cd_sta <> 744
and pse.id_produto_servico = os.id_produto_servico
and ser.cd_servico = pse.cd_servico
and pro.id_produto = pse.id_produto
and ser.fl_onetouch = s
and not exists
(select 1
from sas_itens_os sio, gnr_componentes com
where sio.id_os = os.id_os
and com.id_componente = sio.id_componente
and com.cd_unidade_fabril = 999
and rownum < 2)
and exists
(select 1 from sas_itens_os sio, sas_defeitos def
where sio.id_os = os.id_os
and sio.id_defeito = def.id_defeito
and def.dt_final_vigencia > to_date(30/09/2011,dd/mm/yyyy)))
loop
--
v_os(v_cont_os).nr_os_baan := c_os.nr_os_baan;
v_os(v_cont_os).companhia := c_os.companhia;
v_os(v_cont_os).cod_emitente := c_os.cod_emitente;
v_os(v_cont_os).nro_os := c_os.nr_os_baan;
v_os(v_cont_os).local := c_os.elocal;
v_os(v_cont_os).dt_transacao := c_os.dt_transacao;
v_os(v_cont_os).it_codigo := c_os.it_codigo;
v_os(v_cont_os).data_compra := c_os.data_compra;
v_os(v_cont_os).garantia := c_os.garantia;
v_os(v_cont_os).data_abertura := c_os.data_abertura;
v_os(v_cont_os).serie_prod := c_os.serie_prod;
v_os(v_cont_os).estado_emitente := c_os.estado_emitente;
v_os(v_cont_os).estado_cliente := c_os.estado_cliente;
v_os(v_cont_os).data_fabric := c_os.data_fabricacao;
v_os(v_cont_os).cod_status := c_os.cod_status;
v_os(v_cont_os).grupo_chamado := c_os.grupo_chamado;
v_os(v_cont_os).cd_unidade_fabril := c_os.cd_unidade_fabril;
v_cont_os := v_cont_os + 1;
p_nr_os_proc := p_nr_os_proc + 1;

for c_it_os in (select sio.id_os nr_os_baan
,sio.id_componente id_componente
,sio.id_defeito id_defeito
from sas_itens_os sio
,gnr_componentes com
,sas_defeitos def
where sio.id_os = c_os.nr_os_baan
and com.id_componente = sio.id_componente
and def.id_defeito = sio.id_defeito)
loop
--
p_nr_itos_proc := p_nr_itos_proc + 1;

--
begin
select cd_defeito
into v_cd_defeito
from sas_defeitos
where id_defeito = c_it_os.id_defeito;
exception
when others then
v_cd_defeito := null;
end;
begin
select cd_componente
into v_cd_componente
from gnr_componentes
where id_componente = c_it_os.id_componente;
exception
when others then
v_cd_componente := null;
end;
if ((v_cd_componente is null) or (v_cd_defeito is null)) then
if v_cd_componente is null then
insert into sas_erros_carga_defeitos
(cd_unidade_fabril
,cd_grupo
,cd_defeito
,nr_percentual
,ds_situacao
,dt_atualizacao
,nm_atualizacao
,cd_sta
,nr_os)
values
(c_os.cd_unidade_fabril
,null
,c_it_os.id_defeito
,null
,id_componente: || c_it_os.id_componente ||
nao esta cadastrado na tabela gnr_componentes
,sysdate
,user
,c_os.cod_emitente
,c_os.nr_os);
v_cont_erros := v_cont_erros + 1;
end if;
if v_cd_defeito is null then
insert into sas_erros_carga_defeitos
(cd_unidade_fabril
,cd_grupo
,cd_defeito
,nr_percentual
,ds_situacao
,dt_atualizacao
,nm_atualizacao
,cd_sta
,nr_os)
values
(c_os.cd_unidade_fabril
,null
,c_it_os.id_defeito
,null
,id_defeito: || c_it_os.id_defeito ||
nao esta cadastrado na tabela sas_defeitos
,sysdate
,user
,c_os.cod_emitente
,c_os.nr_os);
v_cont_erros := v_cont_erros + 1;
end if;
elsif v_cont_grupos > 1 then

v_cont_erros := v_cont_erros + 1;

--
elsif v_cont_grupos = 0 then

v_cont_erros := v_cont_erros + 1;
--
else

v_it_os(v_cont_it_os).nr_os_baan := c_os.nr_os_baan;
v_it_os(v_cont_it_os).cod_defeito := null;
v_it_os(v_cont_it_os).companhia := c_os.companhia;
v_it_os(v_cont_it_os).cod_emitente := c_os.cod_emitente;
v_it_os(v_cont_it_os).local := c_os.elocal;
v_it_os(v_cont_it_os).dt_transacao := c_os.dt_transacao;
v_it_os(v_cont_it_os).processado := n;
v_it_os(v_cont_it_os).cd_unidade_fabril := v_cd_unidade_fabril;
v_it_os(v_cont_it_os).cd_grupo := v_cd_grupo;
v_it_os(v_cont_it_os).id_defeito := c_it_os.id_defeito;
--
v_cont_it_os := v_cont_it_os + 1;
--
end if;
--
end loop;
--
end loop;
--

--
if v_cont_erros = 0 then

delete scr_os@dl_crm_touch
where companhia = 451
and dt_transacao between p_data_inicial and p_data_final;
commit;
--
delete scr_it_os@dl_crm_touch
where companhia = 451
and dt_transacao between p_data_inicial and p_data_final;
commit;
--
for ddos in v_os.first .. v_os.last
loop
--
begin
insert into scr_os@dl_crm_touch
(u##nr_os_baan
,nr_os_baan
,u##cod_emitente
,cod_emitente
,nro_os
,local
,dt_transacao
,it_codigo
,data_compra
,garantia
,data_abertura
,serie_prod
,estado_emitente
,estado_cliente
,data_fabric
,cod_status
,grupo_chamado
,companhia
,progress_recid)
values
(upper(v_os(ddos).nr_os_baan)
,v_os(ddos).nr_os_baan
,upper(v_os(ddos).cod_emitente)
,v_os(ddos).cod_emitente
,v_os(ddos).nr_os_baan
,v_os(ddos).local
,v_os(ddos).dt_transacao
,v_os(ddos).it_codigo
,nvl(v_os(ddos).data_compra, v_os(ddos).data_abertura)
,v_os(ddos).garantia
,v_os(ddos).data_abertura
,v_os(ddos).serie_prod
,v_os(ddos).estado_emitente
,v_os(ddos).estado_cliente
,nvl(v_os(ddos).data_fabric, v_os(ddos).data_abertura)
,v_os(ddos).cod_status
,v_os(ddos).grupo_chamado
,v_os(ddos).companhia
,scr_os_seq.nextval@dl_crm_touch);
commit;
exception
when others then
null;
end;
--
end loop;
for dditos in v_it_os.first .. v_it_os.last
loop
--
begin
insert into scr_it_os@dl_crm_touch
(u##nr_os_baan
,nr_os_baan
,cod_emitente
,nro_os
,local
,dt_transacao
,u##cod_defeito
,cod_defeito
,companhia
,progress_recid)
values
(upper(v_it_os(dditos).nr_os_baan)
,v_it_os(dditos).nr_os_baan
,v_it_os(dditos).cod_emitente
,v_it_os(dditos).nr_os_baan
,v_it_os(dditos).local
,v_it_os(dditos).dt_transacao
,upper(v_it_os(dditos).cod_defeito)
,v_it_os(dditos).cod_defeito
,v_it_os(dditos).companhia
,scr_it_os_seq.nextval@dl_crm_touch);
commit;
exception
when others then
null;
end;
--
end loop;
--
end if;

exception
when others then
v_erro := substr(sqlerrm, 1, 300);
null;
end;

problema resolvido!!
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar