Olá,
tenho uma duvida no uso trigger estou usando savepoint e me da erro ???
Pois o processo vai incluir em três tabelas e na ultima não existe o campo
tentei dar um rollback mas deu o erro abaixo.
O que posso fazer pois se der erro em um insert queria que fizesse rollback
em tudo e vai gravar em uma tabela TMP que vou tratar depois …
se alguém puder me ajudar agradeceria…
abs
ORA-20202: Erro ao tentar gravar Usuário no Sistema de Age
ORA-06512: em "AGE.AGENTES_AIUDR", line 36
ORA-04088: erro durante a execução do gatilho 'AGE.AGENTES_AIUDR'
CREATE OR REPLACE TRIGGER agentes_aiudr
after insert or update or delete on agentes
for each row
declare
v_dml varchar2(1);
begin
dbms_output.put_line('passo 1 ......');
if inserting then
v_dml := 'I';
elsif deleting then
v_dml := 'D';
elsif updating then
v_dml := 'A';
end if;
dbms_output.put_line('passo 2 .....');
PACK_AGN_0002.PRC_ONLINE_USUARIO(1 ,
1 ,
1 ,
99999999999 ,
'Fulano de Tal' ,
v_dml
) ;
dbms_output.put_line('passo 3 .....');
exception
when others then
raise_application_error (-20202,'Erro ao tentar gravar Usuário no Sistema de Age');
end;
--------------
procedure PRC_ONLINE_USUARIO (P_CD_POSTO IN NUMBER,
P_CD_USUARIO IN NUMBER,
P_CD_PERFIL IN NUMBER,
P_NU_CPF IN NUMBER,
P_NM_NOME IN VARCHAR2 ,
P_IN_SITUACAO IN VARCHAR2) as
BEGIN
-- trata inclusão
if P_IN_SITUACAO ='I' then
begin
savepoint a;
insert into tb_cta_usuario(CD_USUARIO,
IN_ATIVO,
NU_CPF_USUARIO,
CD_USUARIO_ULTIMA_MAN,
DH_INCLUSAO,
DH_ULTIMA_MANUTENCAO,
NM_USUARIO)
values (P_CD_USUARIO,
0,
P_NU_CPF,
1 , --???
sysdate,
null,
P_NM_NOME
);
insert into tb_cta_perfil_usuario (CD_PERFIL_USUARIO,
CD_USUARIO,
CD_USUARIO_ULTIMA_MAN,
DH_INCLUSAO,
DH_ULTIMA_MANUTENCAO)
values (P_CD_PERFIL,
P_CD_USUARIO,
1 , --???
sysdate,
null
);
insert into tb_pta_posto_usuario (CD_POSTO_ATENDIMENTO,
CD_USUARIO,
CD_USUARIO_ULTIMA_MAN,
DH_INCLUSAO,
DH_ULTIMA_MANUTENCAO )
values (P_CD_POSTO,
P_CD_USUARIO,
1 , --???
sysdate,
null
);
exception
when others then
begin
rollback to a;
PRC_GRAVA_TMP_USUARIO (P_CD_POSTO,
P_CD_USUARIO,
P_CD_PERFIL,
P_NU_CPF,
P_NM_NOME,
P_IN_SITUACAO
);
end;
end;
-- trata alteração
elsif P_IN_SITUACAO ='A' then
begin
update tb_cta_usuario set NM_USUARIO = P_NM_NOME,
DH_ULTIMA_MANUTENCAO = sysdate,
CD_USUARIO_ULTIMA_MAN = 9 --???
where CD_USUARIO =P_CD_USUARIO;
end;
-- trata exclusão
elsif P_IN_SITUACAO ='E' then
begin
update tb_cta_usuario set IN_ATIVO = 1
where CD_USUARIO =P_CD_USUARIO;
end;
end if;
END PRC_ONLINE_USUARIO;