Usar trigger para inserir em tabela

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
elcamone
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Seg, 17 Nov 2008 1:46 pm
Localização: Porto

Ola,
basicamente o que pretendo fazer é:

ir a duas tabelas verificar se um determinado dado se encontra em ambas e escrever as primary key de ambas as tabelas numa terceira tabela, algo do genero:

tabela

Selecionar tudo

exp1 (ID_exp1, xpto1)
tabela

Selecionar tudo

exp2 (ID_exp2, xpto2)
Caso um (ou vários) xpto1 = xpto2 escrever na tabela exp3 (ID_exp1,ID_exp2), exemplo:


Insiro na tabela exp2 os seguintes valores:

Selecionar tudo

insert into exp2 values ('3','aaa')
insert into exp2 values ('4','bbb')
insert into exp2 values ('77','aaa')
insiro na tabela exp1 os seguintes valores:

Selecionar tudo

insert into exp1 values ('gg','aaa')

O trigger deve ir colocar na tabela exp3:

Selecionar tudo

('gg','3')
('gg','77')


Seria algo deste género (embora não funcione):

Selecionar tudo

CREATE or replace TRIGGER experiencia
    AFTER INSERT ON exp1
    REFERENCING NEW AS newRow and old as oldRow
    FOR EACh ROW
    BEGIN
    select xpto2 from exp2
    WHEN (newRow.ID_exp1 = oldRow.ID_exp2)
        INSERT INTO exp3 VALUES(:newRow.ID_exp1, :oldRow.id_exp2);
    END experiencia;

Se alguém souber o que estou a fazer errado agradecia, já ando a queimar neurónios com isto e não chego la... :cry:
Fiquem bem e obrigado
schnu
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 110
Registrado em: Ter, 24 Mai 2005 9:16 pm
Localização: Dongguan - Guangdong - China

Opa beleza ?

vê se isso lhe ajuda, caso não é exatamente o que você quer fazer manda ai de novo

Selecionar tudo

CREATE or replace TRIGGER experiencia 
AFTER INSERT , update ON exp1 
REFERENCING NEW AS newRow and old as oldRow 
FOR EACh ROW 
--
cursor c1 is
select *
from   tabela2
where ID_exp2 = :newrow.ID_exp1;
r1 c1%rowtype;
--
BEGIN 
--
open c1;
fetch c1 into r1;
--
while c1%found loop
  --
  insert into tabela3   ( bla, bla, bla )
         values  ( bla, bla, bla);
  --
  fetch c1 into r1;
end loop;  
--
close c1;
--
END experiencia; 
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 7 visitantes