Bonjour ,

tout d'abord je souhaite préciser que j'ai exposé mon pb sur un autre site similaire au votre , mais que la réponse obtenue va à l'encontre de ce que vous dites sur votre site . A savoir que : on peut faire un trigger instead of sur une vue. L'interlocuteur m'affirmait le contraire. Je ne sais plus quoi penser.

Je vous explique mon problème:

je suis en train de faire un trigger qui doit insérer les données via une vue.

Cette vue s'appelle "caissier", elle permet d'enregistrer les coordonnées d'un client( table1) et son adresse( table 2):

table 1:

IDCLIENT
IDADRESSE
NOMCLIENT
PRENOMCLIENT
TELCLIENT

table2:

IDADRESSE
NUMADRESSE
RUEADRESSE
CPADRESSE
VILLEADRESSE

voici ma vue et mon trigger :


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
16
17
18
19
20
21
22
23
24
25
 
CREATE OR REPLACE VIEW "CAISSIER" ("IDADRESSE", "NUMADRESSE", "RUEADRESSE", "CPADRESSE", "VILLEADRESSE", "IDCLIENT", "NOMCLIENT", "PRENOMCLIENT", "TELCLIENT")
AS
  select a.IDADRESSE,a.NUMADRESSE,a.RUEADRESSE,a.CPADRESSE,a.VILLEADRESSE,
c.IDCLIENT,c.NOMCLIENT,c.PRENOMCLIENT,c.TELCLIENT
 
 
from ADRESSE  a,CLIENT c
 
where a.IDADRESSE=c.IDADRESSE;
 
 
 
  CREATE OR REPLACE TRIGGER "INSERT_CAISSIER_VIEW"
instead of insert  on caissier
 
for each row
 
begin
 
insert into ADRESSE(IDADRESSE,NUMADRESSE,RUEADRESSE,CPADRESSE,VILLEADRESSE)
values (:new.IDADRESSE,:new.NUMADRESSE,:new.RUEADRESSE,:new.CPADRESSE,:new.VILLEADRESSE);
 
insert into CLIENT (IDCLIENT,IDADRESSE,NOMCLIENT,PRENOMCLIENT,TELCLIENT) values (:new.IDCLIENT,:new.IDADRESSE,:new.NOMCLIENT,:new.PRENOMCLIENT,:new.TELCLIENT);
end;
Evidemment ca ne marche pas , j'ai une erreur avec une violation de contrainte :

Erreur SQL : ORA-00001: violation de contrainte unique (MABASE.PK_ADRESSE)
ORA-06512: à "MABASE.INSERT_CAISSIER_VIEW", ligne 3
ORA-04088: erreur lors d'exécution du déclencheur 'MABASE.INSERT_CAISSIER_VIEW'
00001. 00000 - "unique constraint (%s.%s) violated"
*Cause: An UPDATE or INSERT statement attempted to insert a duplicate key.
For Trusted Oracle configured in DBMS MAC mode, you may see
this message if a duplicate entry exists at a different level.
*Action: Either remove the unique restriction or do not insert the key.
Ça concerne IDADRESSE ( la clé étrangère) , il ne veut pas la dupliquer car unique.

Dans mon trigger j'ai tenté d'enlever idadresse et :new.idadresse , mais ça ne fonctionne pas.

Que dois-je modifier dans mon code pour que je puisse insérer dans les 2 tables?

Quelqu'un peut-il m'aider?