- Este tópico contém 4 respostas, 2 vozes e foi atualizado pela última vez 9 anos, 2 meses atrás por Marco Borges.
-
AutorPosts
-
30 de setembro de 2015 às 3:54 pm #107763Marco BorgesParticipante
Senhores.
gostaria de saber como faço para chamar a execução de uma proc, após executar outra, dentro de uma pck que reuni a sequencia do trabalho.
O que tenho é assim:
–A chamada
declare
i integer;
begin
PCK_ALIMENTABASEDEVEDOR_teste.localiza_devedor (pNroTicket => 45);
end;————–
A ideia é ele entrar na localiza_devedor , atualiza minha tabela temporaria com
a coluna correta de cpf
após isto formatar informacoese so apos isto
ele entrar na inclusão propiamente dita.So que o que nao sei fazer e fazer ele chamar nesta ordem.
create or replace package body PCK_ALIMENTABASEDEVEDOR_teste is
pNroTicket number (20);
procedure localiza_devedor is
vCPF varchar2(14);
vCPF_DAC varchar2(14);
vPRODUTO varchar2(5);
vCOD_DEVEDOR number(19);
VCONTRATO varchar2(30);CURSOR c1
IS
select cpf , PRODUTO, NROCONTRATO
into VCPF ,vPRODUTO ,VCONTRATO
from TEMP_INCLUSOES;
CURSOR c2
IS
select dev_cpf,dev_cod
into vCPF_DAC,vCOD_DEVEDOR
from devedor,divida
where dev_cod=div_dev_cod
and dev_pro_cod = vPRODUTO
or div_nrocontrato= VCONTRATO
and dev_cpf like vCPF || ‘%’;begin
open c1;
for x in c2
loop
vCPF :=x.dev_cpf;update TEMP_INCLUSOES set cpf_ajustado=vCPF_DAC where cpf= substr (VCPF,1,12);
end loop;
commit;
close c2;end localiza_devedor;
Procedure formata_informacoes is
v_produto varchar2(3);
begin— Ajuste de contadores da tabela.
update TEMP_INCLUSOES set id=seq_natan.nextval,PROCESSADO=0 ,INCLUIDO=0;— Procedimento para limpar espaços nos e-mails, caso haja
UPDATE TEMP_INCLUSOES SET email1 = REGEXP_REPLACE(email1, ‘s*’, ”);
UPDATE TEMP_INCLUSOES SET email2 = REGEXP_REPLACE(email2, ‘s*’, ”);
UPDATE TEMP_INCLUSOES SET email3 = REGEXP_REPLACE(email3, ‘s*’, ”);
UPDATE TEMP_INCLUSOES SET email4 = REGEXP_REPLACE(email4, ‘s*’, ”);
UPDATE TEMP_INCLUSOES SET email5 = REGEXP_REPLACE(email5, ‘s*’, ”);— configuracao para cada credor em relação a localização do cliente.
—
if v_produto =’IRD’ then
update TEMP_INCLUSOES a set a.cpf = lpad(rtrim(cpf),12,0);
end if;if v_produto =’ICG’ then
update TEMP_INCLUSOES a set a.cpf = lpad(rtrim(cpf),12,0);
end if;end formata_informacoes;
procedure inclusao (pNroTicket in number) is
vDev number(19);
vID smallint;
vCpf varchar2(14);
vDdd number(2);
vNum number(9);
vUni varchar2(4);
vUsu number(19);
vTipo number(4);
MsgErro varchar2(500);
vCount number(4) := 0;
vCountFones number(2);
vcontrato varchar2(30);
v_qua number(1);NAO_PROCESSADO constant number(1) := 0;
ZERA_CONTADOR constant number(1) := 0;
REG_PROCESSADO constant number(1) := 1;
TELEFONE_INVALIDO constant number(2) := 75;
USUARIO_POA constant number(5) := 14171;mDdd PCK_Types_Natan.tToken;
mTel PCK_Types_Natan.tToken;cursor c1 is
select *
from TEMP_INCLUSOES
where processado = NAO_PROCESSADO;function validaTelefone(pDdd number, pNum number) return boolean is
sResult boolean;
vQtTel number(2);
begin
vNum := funcAdaptarTelefoneAnatel(pDdd, pNum);select count(*)
into vQtTel
from telefone
where tel_cpf = vCpf
and tel_numero =vNum
and tel_ddd = vDdd;if ((vQtTel = 0) and (vNum is not null)) then
— Verifica se os numeros sao corretos
if ((vQtTel = 0) and (length(nvl(vNum,0)) in (8,9)) and (vDdd is not null)) then
— Telefone OK
sResult := true;else
— Telefone incorreto
sResult := false;
end if;else
— Telefone nulo ou ja existe
sResult := false;end if;
return sResult;
exception
when others then
MsgErro := sqlerrm;
MsgErro := MsgErro || ‘
Numero invalido! Numero [‘ || pDdd || ‘][‘ || pNum || ‘].’;
insert
into log_importacao_natan
values (‘id ‘||to_char(vID),MsgErro,’TEMP_INCLUSOES’,3,sysdate);
return false;
end validaTelefone;begin
for i in c1 loop
beginvID := i.id;
vcpf := i.cpf;— Busca devedor
select max(dev_cod) into vDev
from devedor
where dev_pro_cod = ‘CCG’
and dev_cpf like i.cpf || ‘%’;if (vDev is not null) then
mDDD(1) := i.ddd_1;
mTel(1) := i.tp_fone_1;vCountFones := ZERA_CONTADOR;
for j in mTel.first .. mTel.last loop
vDdd := mDdd(j);
vNum := mTel(j);if validaTelefone(vDdd, vNum) then
— Busca Unidade do devedor
select max(div_uni_codacionamento) into vUni
from divida
where div_dev_cod = vDev;— Busca CPF para aparecer na inclusão do telefone.
select max(dev_cpf) into vCPF
from devedor
where dev_cod = vDev;— Busca Usuario do Sistema da Filial
begin
select usu_cod into vUsu
from usuario
where usu_uni_cod = vUni
and usu_valido = 1
and upper(usu_nome) like ‘%SUPO%’ || vUni || ‘%’;
exception
when others then
vUsu := USUARIO_POA;
end;if isCelular(vNum, vDdd) then
vTipo := PCK_CONSTANTES.TELEFONE_TIPO_CELULAR;
else
vTipo := PCK_CONSTANTES.TELEFONE_TIPO_OUTROS;
end if;select dev_cpf into vcpf from devedor where dev_cod = vdev;
insert
into telefone (tel_cod
,tel_dev_cod
,tel_cpf
,tel_ddd
,tel_numero
,tel_tipo
,tel_turno
,tel_status
,tel_credor
,tel_uni_cod
,tel_datainclusao
,tel_usu_codinclusao
,tel_troca
,tel_qualificacaocredor)
values (seq_tel.nextval
,vDev
,vCpf
,vDdd
,vNum
,vTipo–vtipo
,21
,PCK_CONSTANTES.TELEFONE_STATUS_NORMAL
,1
,vUni
,sysdate
,vUsu
,4 –rastreio
,v_qua );vCountFones := vCountFones + 1;
end if;
end loop;
update TEMP_INCLUSOES
set processado = REG_PROCESSADO
,incluido = vCountFones
where id = vID;else
— devedor nao encontrado
update TEMP_INCLUSOES
set processado = 2
where id = vID;end if;
vCount := vCount + 1;
if (vCount = 500) then
commit;
vCount := 0;
end if;exception
when others then
update TEMP_INCLUSOES
set processado = 3
where id = vID;
MsgErro := sqlerrm;
dbms_output.put_line(MsgErro);
dbms_output.put_line(”);
insert
into log_importacao_natan
values (‘id ‘||to_char(vID),MsgErro,’TEMP_INCLUSOES’,1,sysdate);
commit;
vCount := 0;
end;
end loop;
commit;
end inclusao;begin
null;
end PCK_ALIMENTABASEDEVEDOR_teste;30 de setembro de 2015 às 4:25 pm #107766rmanParticipante@Marco Borges
Não entendi qual é a dúvida de fato. Não seria fazer as 3 chamadas, uma após a outra?
30 de setembro de 2015 às 4:40 pm #107768Marco BorgesParticipanteSeria.
so que a chamada no test do pl quando eu coloco “.” não faz a chamada da proc localiza_devedor.
Ele entra direto na inclusaão
— Created on 29/09/2015 by MARCO.BORGES
declare
— Local variables here
i integer;
begin
— Test statements here
PCK_ALIMENTABASEDEVEDOR_teste.
end;30 de setembro de 2015 às 4:50 pm #107770rmanParticipante@Marco Borges
Teste assim:
begin
PCK_ALIMENTABASEDEVEDOR_teste.localiza_devedor (pNroTicket => 45);
PCK_ALIMENTABASEDEVEDOR_teste.formata_informacoes;
PCK_ALIMENTABASEDEVEDOR_teste.inclusao (pNroTicket => 45);
end;
30 de setembro de 2015 às 5:14 pm #107771Marco BorgesParticipanteMeu caro.
entre testes e com o que o amigo me falou
fiz assimmudei na pck.
create or replace package body PCK_ALIMENTABASEDEVEDOR_teste ispNroTicket integer;
procedure localiza_devedor (pNroTicket int) is
e fiz a chamada do teste assim:
Veja.
por nao conhecimento nao vi aonde tinha o erro, mas agora ele está fazendo certo a ordem de execute.
— Created on 29/09/2015 by MARCO.BORGES
declare
— Local variables here
i integer;
begin
— Test statements here
begin
PCK_ALIMENTABASEDEVEDOR_teste.localiza_devedor(pNroTicket => ’55’);end;
-
AutorPosts
- Você deve fazer login para responder a este tópico.