Ajuda com Trigger - tabela Mutante

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
Nadia
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Sex, 12 Jan 2007 10:03 am
Localização: São Caetano

Boa tarde Pessoal,

Tenho uma trigger com o seguinte cabeçalho:

Selecionar tudo

CREATE OR REPLACE TRIGGER "TESTE"."TESTE_INTEGRACAO" BEFORE
INSERT ON "TABELA" FOR EACH ROW DECLARE
Quando um registro é inserido, preciso validar alguns campos. Veja as duas situações:

1- Se um campo obrigatorio não estiver preenchido, no final eu tenho que fazer um update neste registro que foi inserido;

2- Se tudo estiver correto a trigger é processada e no final eu tenho que apagar este registro que foi inserido;

Já inseri o comando que trata de tabela mutante Pragma Autonomous_Transaction. Não dá nenhum erro, mas o problema é que o update e delete não funcionam.

Um detalhe importante: Quando insiro o segundo registro, ele atualiza ou deleta o registro anterior e não o que foi inserido.

Alguém pode me ajudar?

Nádia
paulochagas
Moderador
Moderador
Mensagens: 86
Registrado em: Qua, 15 Mar 2006 2:46 pm
Localização: São Paulo - SP
Paulo Chagas Filho
__________________

Analista Funcional / Desenvolvedor Oracle EBS
MSN - paulochagas@hotmail.com
Gtalk - pachafi@gmail.com
Skype - paulochagas

Oi Nadia você poderia atribuir algum valor para :NEW.Campo caso ele esteja null, dessa forma você eliminaria um dml na tabela, gerando assim um erro de tabela mutante,
quanto a segunda situação não entendi o caso, poderia ser mais especifica??
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

MUITO CUIDADO...
Pragma Autonomous_Transaction não é comando que TRATA tabela mutante... :shock:

http://glufke.net/oracle/viewtopic.php?t=96
Nadia
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 9
Registrado em: Sex, 12 Jan 2007 10:03 am
Localização: São Caetano

Vou tentar explicar melhor. Segue abaixo a lógica da trigger

--DECLARO MINHAS VARIAVEIS

Selecionar tudo

DECLARE...

BEGIN
--ALIMENTANDO AS VARIAVEIS COMO QUE FOI INSERIDO NA TABELA. ESTOU USANDO O :NEW COMO ABAIXO:

Selecionar tudo

CampoIntegracao := UPPER(:New.CampoIntegracao);
--AQUI CONTÉM TODO O CODIGO DE PROCESSAMENTO DA TRIGGER QUE ESTÁ FUNCIONANDO

--NO FIM DA TRIGGER, ANTES DO COMANDO (END;) DEVO TER A SITUAÇÃO ABAIXO, QUE NÃO ESTÁ FUNCIONANDO.

Selecionar tudo

    IF Erro THEN   --Se um campo obrigatorio não foi preenchido, devo fazer um update neste registro
        UPDATE REGISTRO ( No proprio registro que foi inserido)
    END IF;

    IF Não Erro THEN --Se não houve erros, deleto o registro
        DELETE REGISTRO ( O proprio registro que foi inserido)
    END IF;
Não sei o oracle permite fazer update e delete no proprio registro inserido.

Como posso resolver isto?

Nádia
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 10 visitantes