Bonjour,
Je souhaiterai avoir de l'aie svp car je trèbuche sur 2 requêtes plsql.
d'abord vici le script de la BD
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
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
rem $ videobld.sql
/* Suppression des synonymes et des tables */
DROP TABLE role ;
DROP TABLE telechargement ;
DROP TABLE film ;
DROP TABLE realisateur ;
DROP TABLE artiste ;
DROP TABLE internaute ;
DROP TABLE pays ;
 
/* Creation des tables */
CREATE TABLE pays
        (
        p_id             VARCHAR2 (3)    PRIMARY KEY CHECK (p_id=UPPER(p_id))       ,
        p_nom           VARCHAR2 (20)    NOT NULL           ,
        p_langue        VARCHAR2 (20)    NOT NULL
        )       ;
CREATE TABLE internaute
       (
        i_id               VARCHAR2 (30)    PRIMARY KEY    CHECK (i_id=LOWER(i_id))   ,     --adresse email
        i_nom             VARCHAR2 (20)    NOT NULL       CHECK (i_nom=UPPER(i_nom))    ,
        i_prenom        VARCHAR2 (20)    NOT NULL          ,
        i_date_nais       DATE             NOT NULL          ,
        i_date_ab        DATE             NOT NULL          ,
        i_nb_bonus         NUMBER (6) DEFAULT 0  NOT NULL        ,
        i_etat            VARCHAR2 (1) DEFAULT 'A'         CHECK (i_etat IN ('A', 'P'))        
              )    ;
CREATE TABLE artiste
       (
        a_id               VARCHAR2 (4)     PRIMARY KEY    CHECK (a_id=UPPER(a_id))  ,
        a_p_id            VARCHAR2 (3)     NOT NULL REFERENCES pays ,
        a_nom             VARCHAR2 (20)    NOT NULL       CHECK (a_nom=UPPER(a_nom))   ,
        a_prenom        VARCHAR2 (20)    NOT NULL          ,
        a_date_nais       DATE             NOT NULL          
              )    ;
CREATE TABLE realisateur
       (
        r_a_id           VARCHAR2 (4)     PRIMARY KEY REFERENCES artiste ,
        r_date_hab        DATE             NOT NULL          ,
        r_niveau        VARCHAR2 (2)     NOT NULL          
              )    ;
CREATE TABLE film
        (
        f_id              VARCHAR2 (5)    PRIMARY KEY     CHECK (f_id=UPPER(f_id))   ,
        f_r_id            VARCHAR2 (4)    NOT NULL REFERENCES realisateur,
        f_p_id            VARCHAR2 (3)    NOT NULL REFERENCES pays,
        f_titre           VARCHAR2 (20)                     CHECK (f_titre=UPPER(f_titre))   ,
        f_genre           VARCHAR2 (1)                    CHECK (f_genre=UPPER(f_genre))    ,
        f_resume        VARCHAR2 (80)    
        )       ;
CREATE TABLE role
       (
       ro_f_id               VARCHAR2(5)      NOT NULL REFERENCES film    ,
       ro_a_id             VARCHAR2(4)      NOT NULL REFERENCES artiste ,
       ro_nom              VARCHAR2 (30)    NOT NULL            ,
            PRIMARY KEY (ro_f_id, ro_a_id)
       )    ;
CREATE TABLE telechargement 
        (
        t_id             VARCHAR2 (6)    PRIMARY KEY    CHECK (t_id=UPPER(t_id))       ,
        t_f_id          VARCHAR2 (5)    NOT NULL REFERENCES film        ,
        t_i_id            VARCHAR2 (30)   NOT NULL REFERENCES internaute ,
        t_date            DATE            NOT NULL
        )   ;
 
/* Chargement des tables */
INSERT INTO pays VALUES ('FR', 'FRANCE','Francais') ;
INSERT INTO pays VALUES ('US', 'EIATS UNIS','Anglais') ;
INSERT INTO pays VALUES ('UK', 'ANGLETERRE','Anglais') ;
INSERT INTO pays VALUES ('JN', 'JAPON','Japonais') ;
INSERT INTO pays VALUES ('RU', 'RUSSIE','Russe') ;
INSERT INTO pays VALUES ('BE', 'BELGIQUE','Francais') ;
INSERT INTO pays VALUES ('CH', 'SUISSE','Francais') ;
 
INSERT INTO internaute VALUES ('smith@gmail.com', 'SMITH', 'Pierre','12/01/1972','31/07/2012', 5, 'A') ;
INSERT INTO internaute VALUES ('jones@gmail.com', 'JONES', 'Claire','14/10/1983', '31/03/2011',4, 'P') ;
INSERT INTO internaute VALUES ('blake@gmail.com', 'BLAKE', 'Claude','31/12/1988','30/11/2012',3, 'A') ;
INSERT INTO internaute VALUES ('clark@gmail.com', 'CLARK', 'Fred','27/09/1986','31/12/2011', 2, 'A') ;
INSERT INTO internaute VALUES ('adams@gmail.com', 'ADAMS', 'Mike','14/11/1984','31/08/2012', 1, 'A') ;
INSERT INTO internaute VALUES ('dupond@gmail.com', 'DUPOND', 'Marc','02/10/1976','30/06/2012', 12, 'A') ;
INSERT INTO internaute VALUES ('dubois@gmail.com', 'DUBOIS', 'Adeline','08/06/1988','30/01/2012', 16, 'A') ;
 
INSERT INTO artiste VALUES ('A1', 'FR','DEPARDIEU', 'Gérard','27/12/1948') ;
INSERT INTO artiste VALUES ('A2', 'FR','MARCEAU', 'Sophie','17/11/1966') ;
INSERT INTO artiste VALUES ('A3', 'FR','BESSON', 'Luc','19/03/1959') ;
INSERT INTO artiste VALUES ('A4', 'FR','LAMOUREUX', 'Robert','04/07/1920') ;
INSERT INTO artiste VALUES ('A5', 'US','LEFEBVRE', 'Jean','03/10/1919') ;
INSERT INTO artiste VALUES ('A6', 'FR','BAYE', 'Nathalie','06/07/1948') ;
INSERT INTO artiste VALUES ('A7', 'FR','BARDOT', 'Brigitte','27/09/1934') ;
INSERT INTO artiste VALUES ('A8', 'US','CRUISE', 'Tom','03/07/1962') ;
INSERT INTO artiste VALUES ('A9', 'US','JOLIE', 'Angelina','04/06/1975') ;
INSERT INTO artiste VALUES ('A10', 'FR','JUGNOT', 'Gérard','04/05/1951') ;
INSERT INTO artiste VALUES ('A11', 'FR','RENO', 'Jean','30/07/1948') ;
INSERT INTO artiste VALUES ('A12', 'FR','BELMONDO', 'Jean-Paul','09/04/1933') ;
INSERT INTO artiste VALUES ('A13', 'FR','BERRY', 'Richard','31/07/1950') ;
INSERT INTO artiste VALUES ('A14', 'FR','DELON', 'Alain','08/11/1935') ;
INSERT INTO artiste VALUES ('A15', 'FR','LHERMITTE', 'Thiery','24/11/1952') ;
INSERT INTO artiste VALUES ('A16', 'FR','DENEUVE', 'Catherine','22/10/1943') ;
INSERT INTO artiste VALUES ('A17', 'US','TRAVOLTA', 'John','18/02/1954') ;
INSERT INTO artiste VALUES ('A18', 'US','QUINN', 'Anthony','21/04/1915') ;
INSERT INTO artiste VALUES ('A19', 'US','WAYNE', 'John','26/05/1907') ;
INSERT INTO artiste VALUES ('A20', 'UK','HOPKINS', 'Anthony','31/12/1937') ;
INSERT INTO artiste VALUES ('A21', 'US','MITCHUM', 'Robert','06/08/1917') ;
INSERT INTO artiste VALUES ('A22', 'US','EASTWOOD', 'Clint','31/05/1930') ;
INSERT INTO artiste VALUES ('A23', 'US','HARRISON', 'Ford','13/07/1942') ;
INSERT INTO artiste VALUES ('A24', 'US','FONDA', 'Henry','16/05/1905') ;
INSERT INTO artiste VALUES ('A25', 'US','KEATON', 'Diane','10/10/1968') ;
INSERT INTO artiste VALUES ('A26', 'US','ALLEN', 'Woody','01/12/1935') ;
INSERT INTO artiste VALUES ('A27', 'US','ROSS', 'Katharine','29/01/1940') ;
INSERT INTO artiste VALUES ('A28', 'US','WINSLET', 'Kate','05/10/1975') ;
INSERT INTO artiste VALUES ('A29', 'CH','VEUVE', 'Jacqueline','11/05/1977') ;
INSERT INTO artiste VALUES ('A30', 'CH','REUSSER', 'Francis','07/11/1972') ;
INSERT INTO artiste VALUES ('A31', 'CH','MIÉVILLE', 'Anne-Marie','06/08/1945') ;
INSERT INTO artiste VALUES ('A32', 'CH','RICHARD', 'Anne','15/09/1981') ;
INSERT INTO artiste VALUES ('A33', 'BE','DE FRANCE', 'Cécile','17/07/1975') ;
INSERT INTO artiste VALUES ('A34', 'BE','MOREAU', 'Yolande','12/02/1953') ;
INSERT INTO artiste VALUES ('A35', 'BE','GILLAIN', 'Marie','18/06/1975') ;
INSERT INTO artiste VALUES ('A36', 'BE','REGNIER', 'Natacha','11/04/1974') ;
INSERT INTO artiste VALUES ('A37', 'BE','DEQUENNE', 'Emilie','29/08/1981') ;
INSERT INTO artiste VALUES ('A38', 'BE','FRANOIS', 'Déborah','24/05/1987') ;
INSERT INTO artiste VALUES ('A39', 'FR','DÉSERT', 'Charlotte','25/07/1989') ;
INSERT INTO artiste VALUES ('A40', 'FR','SAMBOURG', 'Marie','21/07/1988') ;
INSERT INTO artiste VALUES ('A41', 'FR','BOON', 'Dany','26/06/1966') ;
INSERT INTO artiste VALUES ('A42', 'FR','RENAUD', 'Line','02/07/1928') ;
INSERT INTO artiste VALUES ('A43', 'FR','RICHARD', 'Pierre','16/08/1934') ;
INSERT INTO artiste VALUES ('A44', 'US','BRAD', 'Pitt','18/12/1963') ;
 
INSERT INTO realisateur VALUES ('A3', '12/01/1972','N9') ;
INSERT INTO realisateur VALUES ('A4', '19/07/1978','N6') ;
INSERT INTO realisateur VALUES ('A5', '19/07/1950','N7') ;
INSERT INTO realisateur VALUES ('A43', '22/10/1960','N7') ;
INSERT INTO realisateur VALUES ('A41', '10/09/2001','N5') ;
INSERT INTO realisateur VALUES ('A31', '15/11/1978','N7') ;
INSERT INTO realisateur VALUES ('A44', '22/05/2005','N3') ;
INSERT INTO realisateur VALUES ('A26', '20/04/1985','N9') ;
INSERT INTO realisateur VALUES ('A24', '07/02/1957','N9') ;
 
 
INSERT INTO film VALUES ('F1', 'A3', 'CH', 'OISEAU BLEU', 'P', 'un oiseau bleu est né' ) ;
INSERT INTO film VALUES ('F2', 'A43', 'CH', 'BALEINE BLANCHE', 'A', 'la vie dans  la mer') ;
INSERT INTO film VALUES ('F3', 'A31', 'CH','SOLEIL VERT', 'F', 'la mort un système solaire') ;
INSERT INTO film VALUES ('F4', 'A5', 'US','HERBE ROUGE',     'E', 'la polution de la foret') ;
INSERT INTO film VALUES ('F5', 'A4', 'FR', 'CHAMBRE JAUNE',   'P','inspecteur ripou et ses victimes') ;
INSERT INTO film VALUES ('F6', 'A44', 'FR','LAPIN ROSE',      'X', 'la vie une femme libérée') ;
 
INSERT INTO role VALUES ('F1', 'A1', 'Pierre') ;
INSERT INTO role VALUES ('F1', 'A2', 'Nathalie') ;
INSERT INTO role VALUES ('F2', 'A3', 'Pêcheur') ;
INSERT INTO role VALUES ('F2', 'A2', 'Sirène') ;
INSERT INTO role VALUES ('F3', 'A25', 'déesse de la lumière') ;
INSERT INTO role VALUES ('F3', 'A8', 'Capitaine du vaisseau') ;
INSERT INTO role VALUES ('F3', 'A39', 'infirmière') ;
INSERT INTO role VALUES ('F4', 'A42', 'vieille femme de la forêt') ;
INSERT INTO role VALUES ('F4', 'A43', 'scientifique fou') ;
INSERT INTO role VALUES ('F4', 'A40', 'biologiste') ;
INSERT INTO role VALUES ('F4', 'A41', 'militant vert') ;
INSERT INTO role VALUES ('F5', 'A26', 'inspecteur ripou') ;
INSERT INTO role VALUES ('F5', 'A38', 'fille du ripou') ;
INSERT INTO role VALUES ('F5', 'A11', 'capitaine GIGN') ;
INSERT INTO role VALUES ('F6', 'A40', 'charlotte') ;
INSERT INTO role VALUES ('F6', 'A14', 'chef de mafia') ;
 
 
INSERT INTO telechargement VALUES ('T1', 'F1', 'smith@gmail.com', '20/09/2009') ;
INSERT INTO telechargement VALUES ('T2', 'F5', 'smith@gmail.com', '22/10/2010') ;
INSERT INTO telechargement VALUES ('T3', 'F2', 'smith@gmail.com', '03/05/2009') ;
INSERT INTO telechargement VALUES ('T4', 'F1', 'jones@gmail.com', '07/09/2010') ;
INSERT INTO telechargement VALUES ('T5', 'F3', 'jones@gmail.com', '11/12/2011') ;
INSERT INTO telechargement VALUES ('T6', 'F4', 'jones@gmail.com', '11/02/2011') ;
INSERT INTO telechargement VALUES ('T7', 'F3', 'jones@gmail.com', '01/10/2009') ;
INSERT INTO telechargement VALUES ('T8', 'F5', 'blake@gmail.com', '22/10/2011') ;
INSERT INTO telechargement VALUES ('T9', 'F1', 'blake@gmail.com', '01/05/2011') ;
INSERT INTO telechargement VALUES ('T10', 'F6', 'blake@gmail.com', '01/10/2010') ;
INSERT INTO telechargement VALUES ('T11', 'F4', 'blake@gmail.com', '27/09/2011') ;
INSERT INTO telechargement VALUES ('T12', 'F3', 'adams@gmail.com', '27/09/2011') ;
INSERT INTO telechargement VALUES ('T13', 'F5', 'adams@gmail.com', '28/12/2011') ;
INSERT INTO telechargement VALUES ('T14', 'F2', 'adams@gmail.com', '29/07/2011') ;
INSERT INTO telechargement VALUES ('T15', 'F6', 'adams@gmail.com', '02/10/2011') ;
INSERT INTO telechargement VALUES ('T16', 'F6', 'dupond@gmail.com', '30/06/2011') ;
 
/* Validation */
COMMIT ;
rem EXIT
Ensuite voici les questions

1.1. Créer une table log_bonus qui permettra d’enregistrer des informations d’audit sur le nombre de bonus distribués à un internaute ; cette table comportera l’identifiant de l’internaute, la date du jour, l’ancienne et la nouvelle valeur du nombre de bonus.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
CREATE TABLE log_bonus 
( 
i_id CHAR (30) , 
log_date DATE , 
anc_bonus NUMBER (6) , 
nouv_bonus NUMBER (6) ) ;
PREMIER PROBLEME
1.2.
Créer un trigger audit_bonus sur la table INTERNAUTE qui se déclenche après chaque mise à jour lorsque la nouvelle valeur du nombre bonus devient supérieur à l’ancienne valeur 30 points ; ce trigger enregistrera l’ancienne valeur et la nouvelle valeur du nombre de bonus dans la table d’audit log_bonus.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
CREATE OR REPLACE TRIGGER audit_bonus
AFTER UPDATE ON internaute
FOR EACH ROW 
WHEN (new.nouv_bonus > 30) 
BEGIN 
INSERT INTO log_bonus (i_id, log_date, anc_bonus, nouv_bonus) 
VALUES ( :new.id_internaute, SYSDATE, :old.anc_bonus, :new.nouv_bonus) ; 
END ;
OU Même ça

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
CREATE OR REPLACE TRIGGER audit_bonus
AFTER UPDATE ON internaute
FOR EACH ROW
WHEN (new.nb_max_bonus > 30)
BEGIN
INSERT INTO log_bonus (i_id, log_date, anc_bonus, nouv_bonus)
VALUES ( :new.i_id, SYSDATE, :old.nb_max_bonus, :new.nb_max_bonus) ;
END ;
Pourtant rien ne marche alors que logiquement... erreur retournée: error ora-00904 invalid identifier new.nouv_bonus pour le 1er et même erreur avec new.nb_max_bonus pour le second.

SECOND PROBLEME celle ci j'y arrive pas.

Créer un trigger offre_bonus à déclencher après chaque téléchargement qui
- ajoute 20 points de bonus pour le premier téléchargement du mois
- ajoute 10 points pour le premier téléchargement du jour (cumulable avec le 1e offre)
- ajoute 5 points de bonus dans d’autre cas.
- enfin, on ajoute 30 points à tout téléchargement dans le mois d’anniversaire de l’Internaute. Cette offre est cumulable avec les précédentes offres.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
CREATE OR REPLACE TRIGGER offre_bonus
AFTER INSERT ON telechargement
FOR EACH ROW
DECLARE
nb_telech number ;
 
BEGIN
Je vous remercie d'avance =)