NaPraia 12 Denunciar post Postado Julho 18, 2008 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
Motta 645 Denunciar post Postado Julho 18, 2008 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
NaPraia 12 Denunciar post Postado Julho 18, 2008 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
Motta 645 Denunciar post Postado Julho 18, 2008 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
NaPraia 12 Denunciar post Postado Julho 18, 2008 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
Motta 645 Denunciar post Postado Julho 21, 2008 Que dados você precisa passar ? Compartilhar este post Link para o post Compartilhar em outros sites
NaPraia 12 Denunciar post Postado Julho 21, 2008 preciso passar duas datas Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Julho 21, 2008 dt_ativacao e dt_inativacao ?? O que se vai gravar ? As datas correntes ? Compartilhar este post Link para o post Compartilhar em outros sites
NaPraia 12 Denunciar post Postado Julho 21, 2008 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
Motta 645 Denunciar post Postado Julho 21, 2008 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
NaPraia 12 Denunciar post Postado Julho 21, 2008 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
Motta 645 Denunciar post Postado Julho 21, 2008 Esta não posso publicar , pois é código da empresa. Compartilhar este post Link para o post Compartilhar em outros sites
NaPraia 12 Denunciar post Postado Julho 21, 2008 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
Motta 645 Denunciar post Postado Julho 21, 2008 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