Estou tentando montar um trigger para que toda vez que for inserido um novo dado na tabela ‘OWGCTCLP.TMP_TESTE’ eu consigo fazer select nesses novos dados e inseri-los em outra tabela ‘OWGCTCLP.TMP_TESTE2’, alguem poderia me ajudar?
Eu montei um trigger para ser ativado toda vez que for inserido novos valores, e assim eu chamo um procedure para pegar esses dados e fazer um select para inserir na outra tabela.
Eu não posso utilizar o comando VALUES porque eu ainda irei usar dados de outra tabela, por isso estou usando o SELECT no exemplo
CREATE OR REPLACE TRIGGER TESTE_TRG
_ AFTER INSERT ON OWGCTCLP.TMP_TESTE _
_ FOR EACH ROW_
DECLARE
_ PRAGMA AUTONOMOUS_TRANSACTION;_
_ _
BEGIN
_ _
_ teste_proc(:NEW.DATA_FATURA)_
_ _
_ ;_
_ _
END TESTE;
_create or replace procedure teste_proc(DATA_FATURA DATE) _
is
begin
_ _
INSERT INTO OWGCTCLP.TMP_TESTE2 T2 (T2.DATA_FATURA)
–INSERE NOVAS NOTAS PENDENTES NA TABELA.
–VALUES(TO_NUMBER(DATA_FATURA,‘DD’))
–VALUES(TO_CHAR(teste_proc.DATA_FATURA,‘DD’))
SELECT TO_CHAR(teste_proc.DATA_FATURA,‘DD’) FROM teste_proc
;
_ COMMIT;_
_ – RAISE;_
_ _
_ _
end teste_proc;
Bom, apenas alertando, sua abordagem com trigger para o que vc quer, eu não acho que seja boa ideia, a performance pode cair muito a longo prazo…
Uma abordagem melhor seria vc usar eventos (vc não disse qual banco está usando) em mysql, por exemplo existe os schedules/events, pesquise algo parecido para seu banco…
Resumindo, imagine rodar um evento a cada X tempos (agendado), pegando o que foi inserido de uma tabela para a outra…
Isso é minha recomendação obviamente, agora quanto a sintaxe para usar insert com select, os values vc não define, ex:
INSERT tabela (campos...) SELECT campos... FROM tabela2...
Espero ter ajudado.
Eu estou usando PL/SQL, acredito que não tenha essa opção de Eventos
estou usando o TRIGGER
E--------TRIGGER--------
CREATE OR REPLACE TRIGGER TESTE_TRG
__ AFTER INSERT ON OWGCTCLP.TMP_TESTE __
__ FOR EACH ROW__
DECLARE
__ PRAGMA AUTONOMOUS_TRANSACTION;__
__ __
BEGIN
__ __
__ teste_proc(:NEW.DATA_FATURA)__
__ __
__ ;__
__ __
END TESTE;
--------PROCEDURE--------
**create or replace procedure teste_proc(DATA_FATURA DATE) **
is
begin
INSERT INTO OWGCTCLP.TMP_TESTE2 T2 (T2.DATA_FATURA)
–INSERE NOVAS NOTAS PENDENTES NA TABELA.
SELECT TO_CHAR(teste_proc.DATA_FATURA,‘DD’) FROM teste_proc
;
** COMMIT;**
end teste_proc;