-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProjetTrigger.sql
More file actions
247 lines (167 loc) · 4.07 KB
/
Copy pathProjetTrigger.sql
File metadata and controls
247 lines (167 loc) · 4.07 KB
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
--Il faudra peut etres reecrire tout les triggers de maniere plus 'imperative', car risque
--de maxi bordel avec les appelle en cascade
--Trigger a l'insertion dans utilisateur
--verifie qu'un pseudo n'est pas deja attribue et sinon en creer un en incrementer un
--chiffre
CREATE OR REPLACE TRIGGER insertUtil
BEFORE
INSERT ON UTILISATEUR
FOR EACH ROW
DECLARE
newId UTILISATEUR.idUtilisateur%type;
testPseudo UTILISATEUR.pseudo%type;
/* test a faire sur le site
CURSOR testPseudo IS
SELECT pseudo
FROM UTILISATEUR
WHERE new.pseudo==pseudo;
CURSOR testEmail IS
SELECT pseudo
FROM UTILISATEUR
WHERE new.mail==mail;
*/
BEGIN
--OPEN testPseudo;
--if(testPseudo%FOUND)
-- EXCEPTION
-- OPEN testEmail;
--if(testEmail%FOUND)
-- EXCEPTION
-- SELECT mail FROM new WHERE REGEX_LIKE(mail,)
SELECT max(idUtilisateur) INTO newId FROM UTILISATEUR;
:new.idUtilisateur=newId+1;
END;
/
-- TRIGGER de suppression
--En cas de supression d'un utilisateur les trigger s'appelle en cascade
--------
CREATE OR REPLACE TRIGGER SupprUtil
BEFORE
DELETE ON UTILISATEUR
DECLARE
newId UTILISATEUR.idUtilisateur%type;
testPseudo UTILISATEUR.pseudo%type;
BEGIN
DELETE
FROM COMMENTE
WHERE old.idUtilisateur==COMMENTE.idUtilisateur;
DELETE
FROM CREELISTE
WHERE old.idUtilisateur==CREELISTE.idUtilisateur;
DELETE
FROM CONSULTATION
WHERE old.idUtilisateur==CONSULTATION.idUtilisateur;
DELETE
FROM COMPTECONSULTER
WHERE old.idUtilisateur==COMPTECONSULTER.idUtilisateur;
END;
/
CREATE OR REPLACE TRIGGER supprComment
BEFORE
DELETE ON COMMENTE
DECLARE
BEGIN
DELETE
FROM COMMENTAIRE
WHERE old.idComment==COMMENTAIRE.idComment;
END;
/
CREATE OR REPLACE TRIGGER supprCreeliste
BEFORE
DELETE ON CREELISTE
REFERENCING
DECLARE
BEGIN
DELETE
FROM LISTEOBJET
WHERE old.idListe==LISTEOBJET.idComment;
END;
/
CREATE OR REPLACE TRIGGER supprListe
BEFORE
DELETE ON LISTEOBJET
DECLARE
BEGIN
DELETE
FROM APPARTIENTLISTE
WHERE old.idListe==APPARTIENTLISTE.idListe;
DELETE
FROM ESTDECRITDANS
WHERE old.idListe==ESTDECRITDANS.idListe;
END;
/
--supression Objetculturel
CREATE OR REPLACE TRIGGER supprObjetCulturel
BEFORE
DELETE ON LISTEOBJET
DECLARE
BEGIN
DELETE
FROM APPARTIENTLISTE
WHERE old.idObjet==APPARTIENTLISTE.idObjet;
DELETE
FROM ESTDECRITDANS
WHERE old.idObjet=ESTDECRITDANS.idObjet;
DELETE
FROM ESTCOMMENTE
WHERE old.idObjet==ESTCOMMENTE.idObjet;
DELETE
FROM NOTE
WHERE old.idObjet==NOTE.idObjet;
END;
/
CREATE OR REPLACE TRIGGER supprEstCommente
BEFORE
DELETE ON ESTCOMMENTE
DECLARE
idComment_aSuppr COMMENTAIRE.idComment%type;
BEGIN
SELECT idComment
INTO idComment_aSuppr
FROM COMMENTAIRE
WHERE old.idComment==COMMENTAIRE.idComment;
DELETE
FROM COMMENTAIRE
WHERE old.idComment==COMMENTAIRE.idComment;
DELETE
FROM COMMENTE
WHERE COMMENTE.idComment==idComment_aSuppr;
END;
/
--/TRIGGER de suppression
--Ajout automatiquement l'objet a la liste mois/annee de sa date de sortie
/*
CREATE OR REPLACE TRIGGER insertObjetCulturelListe
BEFORE
INSERT ON OBJETCULTUREL
REFERENCING
DECLARE
BEGIN
END
AFTER
INSERT ON OBJETCULTUREL
REFERENCING
DECLARE
mois varchar2(6);
annee varchar2(6);
nom_liste varchar(12);
CURSOR IS
SELECT *
FROM CREELISTE,LISTEOBJET
WHERE CREELISTE.idUtilisateur==1 and CREELISTE.idListe==LISTEOBJET.idListe and
LISTEOBJET.nomListe==CONCAT(mois,annne);
BEGIN
INSERT INTO LISTEOBJET VALUES (0,new.genre) INTO
mois=Trunc(new.date_sortie,'MM');
annee=Trunc(new.date_sortie,'YYYY');
if
DELETE
FROM COMMENTAIRE
WHERE old.idComment==COMMENTAIRE.idComment;
DELETE
FROM COMMENTE
END;
/
--TRIGGER d'insertion
*/
--Divers trigger de test d'integrite de la base apres transaction