Bonjour,

J'ai sur ma base les tables:
test1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
create table test1(
id number(9) not null,
adresse varchar2(10),
constraint test1_pk primary key (id));
test2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
create table test2(
id number(9) not null,
nom varchar2(10),
test1_id number(9),
constraint test2_pk primary key (id),
constraint test2_fk foreign key (test1_id) references test1 (id));
et la vue:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
create view vue_test2 as select T.nom, T.test1_id, C.adresse, T.id from test1 C, test2 T
where T.test1_id=C.id;
Les clés primaires de mes tables sont auto-incrémentées et je souhaite lors d'un insert sur la vue que les tables test1 et test2 soient mises à jour.

J'ai donc fait:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
create or replace trigger tr_test1 instead of insert on vue_test2
begin
    insert into test1
        (id, adresse)
            values(
                :new.test1_id,
                :new.adresse);
    insert into test2
        (id, nom, prenom, test1_id)
            values(
                :new.id,
                :new.nom,
                :new.prenom,
                :new.test1_id);
end;
puis
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 insert into vue_test2 (nom,prenom, test1_id, id, adresse) values ('ss','zz',9, 9, 'lille')
Avec test1_id=9 et id=9 n'existant pas encore.

Ca marche mais j'aimerais ne pas avoir à préciser l'id de la table test2 et test1, et que lorsque l'adresse existe déja dans la table test1 aucune ligne ne soit rajoutée.
Pb je n'y arrive pas.

Si vous avez des idées pouvant m'aider ou besoin de plus de précisions...
Je précise que je peux changer la vue (enlever colonne id,...) si nécessaire.

Merci