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 :
Evidemment ca ne marche pas , j'ai une erreur avec une violation de contrainte :
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;
Ça concerne IDADRESSE ( la clé étrangère) , il ne veut pas la dupliquer car unique.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.
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?
Partager