- Este tópico contém 12 respostas, 3 vozes e foi atualizado pela última vez 18 anos, 9 meses atrás por
Marcio68Almeida.
-
AutorPosts
-
4 de junho de 2007 às 10:17 pm #79582
djdigao
ParticipanteBoa tarde pessoal, alguem sabe me dizer qual seria a tabela equivalente no oracle a tabela inserted do SQL Server. Valeu pessoal agradeço a todos desde já 🙂
4 de junho de 2007 às 10:57 pm #79583Marcio68Almeida
Participantediga o que faz uma tabela inserted no SQL Server que facilitaria bastante a nossa ajuda…
4 de junho de 2007 às 11:34 pm #79584djdigao
ParticipanteA tabela inserted faz o seguinte, toda vez que vc faz um update ou insert os dados vão primeiramente para esta tabela inserted e depois para a tabela real de destino e tambem tem a deleted que armazena dos dados antes deles serem apagados, a minha idéia e pegar os dados com uma trigger antes deles serem atualizados e deletados, quero fazer tipo uma auditoria em algumas tabelas.
5 de junho de 2007 às 12:00 am #79586Marcio68Almeida
ParticipanteAh, entendi…
Dentro da trigger você encontrará a opção :NEW.coluna e :OLD.coluna onde estão as informações atualizadas (:NEW) e as anteriores (:OLD)
Creio que é isso que você quer…5 de junho de 2007 às 4:17 pm #79591djdigao
ParticipanteLegal, entendi o esquema então.
Agora deixa eu aproveitar e ver com vc o seguinte: Existe varáveis do Oracle que me retorne o Usuário da que esta logado na estação? Eu gostaria de pegar o usuario da estação e a máquina que ele esta logado no momento.5 de junho de 2007 às 5:08 pm #79592Marcio68Almeida
ParticipanteTente este script :
CREATE OR REPLACE TRIGGER marca_logon
AFTER LOGON ON DATABASE
BEGIN
INSERT INTO sys.vigia
VALUES (USER || ' entrou no sistema em ' ||
TO_CHAR(sysdate, 'DD-MM-YYYY HH24:MI:SS') ||
' pelo terminal ' || userenv('terminal') );
COMMIT;
END;
/
5 de junho de 2007 às 9:26 pm #79593djdigao
Participante
create or replace TRIGGER "USUARIO_SYS"."INSERIR_AUDIT"
BEFORE INSERT ON "TESTE"
FOR EACH ROW
DECLARE
VAR_DATA DATE:=SYSDATE;
VAR_ORIGEM VARCHAR(4000);
VAR_TABELA VARCHAR(4000);
VAR_REGISTRO VARCHAR(4000):= TO_CHAR(:NEW.HORA);
BEGIN
SELECT 'Usuário da estação:' || sys_context('USERENV', 'OS_USER') || ' - ' || 'Estação:' || sys_context('USERENV', 'HOST') || ' - ' || 'IP da estação:' || sys_context('USERENV', 'IP_ADDRESS') INTO VAR_ORIGEM FROM dual;
INSERT INTO RECIVIL_AUDIT
VALUES(VAR_DATA, 1, VAR_ORIGEM, 'TESTE', VAR_REGISTRO, 'INSERT');
END;
Esse é o meu código, o que eu queria fazer tb era pegar o nome da tabela que eu estou usando a trigger com algum código PL/SQL, ja consegui pegar tudo esta faltando o nome da tabela, ah, e tb eu gostaria de saber se tem como referenciar todos os campos no comando :NEW, eu queria pegar todos os campos da tabela de uma só vez, é possível? Ja tentei :NEW.*, mais não deu certo
5 de junho de 2007 às 9:37 pm #79594Marcio68Almeida
ParticipanteA trigger deve ser inserida em cada tabela, não dá para fazer uma trigger genérica para esse trabalho…
Portanto…
O nome da tabela você vai ter, já que é nela que a trigger está…
O nome das colunas devem ser tratados individualmente, não com *
Se você tinha a ilusão de “registrar” todas as mudanças em todas as tabelas, todas as colunas, acho melhor você repensar, pois isso, dependendo do tamanho das suas tabelas, é inviável.
Comandos de lote como TRUNC e LOAD não “disparam” a trigger…5 de junho de 2007 às 9:42 pm #79595djdigao
ParticipanteCerto, muito obrigado Marcio me ajudou bastante mesmo. 😀
8 de junho de 2007 às 6:59 pm #79628JamirJr
ParticipanteAchei muito interessante esta trigger:
create or replace trigger catch_error
after servererror on databasedá uma olhada:
http://mportes.blogspot.com/2006/01/tri … error.html
11 de junho de 2007 às 5:20 pm #79638djdigao
ParticipanteBom dia pessal!
Essa variavel TG_OP existe no PL/SQL do oracle 10g ? Ela retorna o tipo de instrução que fui executada na trigger, tipo se foi um INSERT, UPDATE ou DELETE.
Se ela não exitir qual devo utilizar?13 de junho de 2007 às 11:09 pm #79688JamirJr
Participantenão encontrei esta variavel TG_OP,
mas vc pode fazer uma varredura no campo string e verificar se existe a palavra “select” ou por qualquer outra que vc queira fazer um filtro.
13 de junho de 2007 às 11:35 pm #79689Marcio68Almeida
Participante[quote=”djdigao”:1ppbq6do]Bom dia pessal!
Essa variavel TG_OP existe no PL/SQL do oracle 10g ? Ela retorna o tipo de instrução que fui executada na trigger, tipo se foi um INSERT, UPDATE ou DELETE.
Se ela não exitir qual devo utilizar?[/quote]IF ( updating OR inserting ) THEN
:new.ic_envio := '1';
END IF; -
AutorPosts
- Você deve fazer login para responder a este tópico.