Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

NaPraia

trigger

Recommended Posts

daí pessoal, beleza?

 

tô com um probleminha, tenho uma tabela FUNCIONARIO, tem os campos id_funcionario, nm_funcionario entre outros. Quando eu fizesse qualquer ação (insert, update e delete)

eu queria gravar um registro na tabela FUNCIONARIO_VERSAO, só que não estou sabendo como passar um parâmetro na trigger

 

eis a minha trigger

CREATE OR REPLACE TRIGGER TRG_FUNCIONARIO
AFTER INSERT OR UPDATE OR DELETE ON FUNCIONARIO
  FOR EACH ROW

BEGIN
  IF INSERTING THEN
	PKG_VERSIONAMENTO.PCR_INSERT_FUNCIONARIO(:new.id_funcionario, dat_ativacao, dat_inativacao);
  ELSIF UPDATING THEN
	PKG_VERSIONAMENTO.PCR_UPDATE_FUNCIONARIO(:new.id_funcionario, dat_ativacao, dat_inativacao);
  ELSIF DELETING THEN
	PKG_VERSIONAMENTO.PCR_DELETE_FUNCIONARIO(:new.oid_funcionario, dat_ativacao, dat_inativacao);
  END IF;
	
END;

no caso, o sistema está desenvolvido em oracle (forms) e só atualiza a tabela FUNCIONARIO e vou modificar o sistema para passar essas duas datas para atualizar a FUNCIONARIO_VERSAO.

mas como eu faço para passar um parâmetro por uma trigger, pois esses campos de data eu não tenho na tabela FUNCIONARIO.

 

o erro que está dando na trigger é:

PLS00201 - identificador inválido "dat_ativacao"

como posso arrumar?

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Numa trigger FOR EACH ROW os campos são acessados pelo seu nome mais um prefixo

:NEW. ou :OLD.

 

NEW indica o novo conteúdo do campo e OLD o antigo.

Num Insert OLD está nulo sempre e num Delete NEW nulo.

No seu exemplo creio que faltou o prefixo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

valeu Motta, mas o problema que eu estava vendo é que não dá para passar parâmetros em trigger. Pois esses dois campos que estou passando que não têm o :old e :new não são dessa tabela da trigger.

eu até ia fazer de outro jeito, mas o cara que me passou o serviço disse para eu não me preocupar com essas datas que vai ser jogado sysdate nelas.

vai ficar uma porcaria, mas fazer o quê, ele que tá dizendo.

 

se sobrar um tempo vou fazer uma coisa descente, pois depois alguém vai ter que arrumar e acredito que seja eu.

 

valeu motta

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sugestão , SERIA ALGO =OU- ASSIM :

 

CREATE OR REPLACE TRIGGER TRG_FUNCIONARIO

AFTER INSERT OR UPDATE OR DELETE ON FUNCIONARIO

FOR EACH ROW

 

BEGIN

IF INSERTING THEN

INSERT INTO FUNCIONARIO_HISTORICO('I',:NEW.COD,:NEW.NOME,...);

ELSIF UPDATING THEN

INSERT INTO FUNCIONARIO_HISTORICO('U',:OLD.COD,:OLD.NOME,...);

ELSIF DELETING THEN

INSERT INTO FUNCIONARIO_HISTORICO('D',:OLD.COD,:OLD.NOME,...);

END IF;

 

END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

INSERT INTO FUNCIONARIO_HISTORICO('I',:NEW.COD,:NEW.NOME,...);

é que bem dizer eu não vou guardar um histórico completo, eu coloquei como tabela funcionário para facilitar, mas é contrato, que aí tenho a tabela documento, cláusula, variável e regras.

os documentos vão ficar armazenados na tabela documentos, e na tabela documento_versao vou guardar o id_documento, num_versao, dt_ativacao e dt_inativacao.

 

eu precisaria era passar a data para gravar na tabela documento_versao

 

 

 

mas valeu pela dica, se te ocorrer alguma outra forma, manda aí.

obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

dt_ativacao e dt_inativacao ??

 

O que se vai gravar ?

As datas correntes ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

dt_ativacao e dt_inativacao ??

sim

 

O que se vai gravar ?

As datas correntes ?

na maioria das vezes, a dt_ativacao receberá sysdate e dt_inativacao será null

 

mas não dá para adotar como regra.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu já fiz algo parecido com trigger.

SIB da ANS (mandar registros de incluídos, alterados e excluídos de plano de saúde mensalmente).Fiz a trigger para ter a tabela base de movimentação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

também já trabalhei com planos de saúde em plataforma oracle.

Tem uns requisitos da ANS que são um pé no saco.

 

Fiz a trigger para ter a tabela base de movimentação.

tu não tem essa trigger?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta não posso publicar , pois é código da empresa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta não posso publicar , pois é código da empresa.

pô, que pena, mas viu, usei o termo no passado, não trabalho mais, desde que resolveram implantar aquela droga da DIRF.

 

então dá umas dicas de como posso tentar usar parâmetros numa trigger.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não se passa parametros em trigger o que se tem são os dados antes e depois da tabela (quando em FOR EACH ROW).

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.