Procedure pl / sql

1

Talk to the galley blz? Hi, I'm new to PL / SQL and I'm creating my first procedure because I need to load two tables (Insert or Change) I'm using Merge. But when I try to execute my procedure I already get the following error

  

PLS - 000103: Found the symbol "BEGIN"

create or replace procedure pr_voxis_beneficiario(
p_retorno_beneficiario out varchar2,
p_retorno_pessoa out varchar2) is

begin
merge into pessoa_fisica_acol pf
using (select p.nopessoa nom_pessoa,substr(lpad(p.nrcgc_cpf,'11','0'),1,9) cpf_num,
substr(lpad(p.nrcgc_cpf,'11','0'),10,11) cpf_dv
from pessoa p,usuario u
where p.nrregistro = u.nrregistro_usuario
and (u.dtexclusao is null or u.dtexclusao > sysdate)) p

on (pf.nom_pessoa = p.nopessoa)

when matched then
update set pf.cpf_num = p.cpf_num,
pf.cpf_dv = p.cpf_dv

when not matched then 
insert (pf.seq_pessoa_fisica,pf.nom_pessoa,pf.cpf_num,pf.cpf_dv)
values ((select max(pf.seq_pessoa_fisica) + 1 
from pessoa_fisica_acol pf),p.nom_pessoa,p.cpf_num,p.cpf_dv);

commit;
p_retorno_pessoa := 'OK';
exception when others then begin
rollback;
p_retorno_pessoa := 'Erro ao atualizar Dados.' || chr(13) || chr(10) || sqlerrm;
end;
end pr_voxis_beneficiario;

begin

merge into beneficiario_acol b
using (select '0' seq_beneficiario,'1' seq_convenio,p.dtnascimento,null dat_emissao,i.dtvalidade,
i.nrvia_cartao,'0'||u.cdareaacao||u.nrcontrato||lpad(u.nrfamilia,'6','0')||u.tpusuario NUM_CARTEIRA_BENEFICIARIO,
p.cdsexo,'' cod_plano,decode(i.dtcancelamento,'','1','0') flg_ativo,i.dtcancelamento,null seq_plano_saude,
u.nrsequencial_usuario,substr(t.txacomodacao,1,11) txacomodacao

from usuario u,
pessoa p,
usuario_identificacao i,
tipo_de_plano t

where u.nrregistro_usuario = p.nrregistro and
u.nrsequencial_usuario = i.nrsequencial_usuario and
u.tpplano = t.tpplano ) s

on (b.num_carteira_beneficiario = s.NUM_CARTEIRA_BENEFICIARIO)
when matched then
update set b.seq_beneficiario = s.seq_beneficiario,
b.seq_convenio = s.seq_convenio,
b.dat_nascimento = s.dtnascimento,
b.dat_emissao = s.dat_emissao,
b.dat_validade = s.dtvalidade,
b.num_via_carteira = s.nrvia_cartao,
b.sexo_beneficiario = s.cdsexo,
b.bkpv301#cod_plano = s.cod_plano,
b.flg_ativo = s.flg_ativo,
b.dat_cancelamento = s.dtcancelamento,
b.seq_plano_saude = s.seq_plano_saude,
b.seq_beneficiario_cliente = s.nrsequencial_usuario,
b.pdr_internacao = s.txacomodacao

when not matched then 
insert (b.seq_beneficiario,b.seq_convenio,b.dat_nascimento,
b.dat_emissao,b.dat_validade,b.num_via_carteira,b.num_carteira_beneficiario,
b.sexo_beneficiario,b.bkpv301#cod_plano,b.flg_ativo,b.dat_cancelamento,
b.seq_plano_saude,b.seq_beneficiario_cliente,b.pdr_internacao )

values (sequencial,s.seq_convenio,s.dtnascimento,s.dat_emissao,s.dtvalidade,
s.nrvia_cartao,s.NUM_CARTEIRA_BENEFICIARIO,s.cdsexo,s.cod_plano,s.flg_ativo,
s.dtcancelamento,s.seq_plano_saude,s.nrsequencial_usuario,s.txacomodacao);

commit;
p_retorno_beneficiario := 'OK';
exception when others then begin
rollback;
p_retorno_beneficiario := 'Erro ao atualizar Dados.' || chr(13) || chr(10) || sqlerrm;
end;
end pr_voxis_beneficiario;
    
asked by anonymous 14.10.2015 / 17:30

1 answer

0

You used BEGIN twice when setting procedure :

create or replace procedure pr_voxis_beneficiario(
    p_retorno_beneficiario out varchar2,
    p_retorno_pessoa out varchar2) 
is
begin -- aqui
    merge into pessoa_fisica_acol pf
    ...

And then:

begin

merge into beneficiario_acol b
using (select '0' seq_beneficiario,'1' seq_convenio,p.dtnascimento,null dat_emissao,i.dtvalidade,
i.nrvia_cartao,'0'||u.cdareaacao||u.nrcontrato||lpad(u.nrfamilia,'6','0')||u.tpusuario NUM_CARTEIRA_BENEFICIARIO,
p.cdsexo,'' cod_plano,decode(i.dtcancelamento,'','1','0') flg_ativo,i.dtcancelamento,null seq_plano_saude,
u.nrsequencial_usuario,substr(t.txacomodacao,1,11) txacomodacao
...

This second begin is without block. Remove it which should work.

See more here .

    
14.10.2015 / 17:41