Duvida no uso trigger com Oracle?

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;