GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Ao Inserir dados de uma tabela, usar select para inserir esses dados em outra tabela

programação
Tags: #<Tag:0x00007f972329a3d0>

#1

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;


#2

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.


#3

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;


#4

Será que não tem mesmo?

https://docs.oracle.com/cd/B28359_01/server.111/b28310/scheduse008.htm#ADMIN10020