Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Débuter
Débuter Forum d'entraide pour débuter avec Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/03/2008, 19h13   #1
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 66
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 66
Points : 35
Points : 35
Par défaut Erreur de syntaxe

Je dois creer une trigger qui empeche d'emprunter un livre si le livre précédent n'a pas été rendu à temps.

Voilà mon code :
Code :
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
 
CREATE OR REPLACE TRIGGER puni
BEFORE INSERT
ON emprunt
FOR EACH ROW
 
DECLARE
erreur_v EXCEPTION;
date_emprunt_v DATE;
date_retour_v DATE;
date_v DATE;
 
BEGIN 
 
SELECT date_retour INTO date_retour_v
 FROM ( SELECT * FROM emprunt ORDER BY date_emprunt)
 WHERE num_inscr = :new.num_inscr AND ROWNUM = 1;
 
SELECT date_emprunt INTO date_emprunt_v
 FROM ( SELECT * FROM emprunt ORDER BY date_emprunt)
 WHERE num_inscr = :new.num_inscr AND ROWNUM = 1;
 
IF(date_emprunt_v = NULL) THEN date_emprunt_v := SYSDATE; END IF;
IF (date_retour_v = NULL) THEN date_retour_v := SYSDATE; END IF;
 
date_v := TO_DATE(date_emprunt_v) + 15;
 
IF( date_v < date_retour_v) THEN RAISE erreur_v; END IF;
 
EXCEPTION
WHEN erreur_v THEN
RAISE_APPLICATION_ERROR(-20003,'tu es puni, pas le droit d'emprunter un livre tout de suite');
END;
Et voici l'erreur que je récupère (qui est souvent la même et je ne comprend jamais du vient se problème) :

Citation:
ERROR at line 26: PLS-00103: Symbole "EMPRUNTER" rencontré à la place d'un des symboles suivants :

) , * & | = - + < / > at in is mod remainder not rem => ..
<> or != or ~= >= <= <> and or like LIKE2_
LIKE4_ LIKEC_ between || multiset member SUBMULTISET_

1. CREATE OR REPLACE TRIGGER puni
2. BEFORE INSERT
3. ON emprunt
4. FOR EACH ROW
Merci d'avance, bonne soirée à vous
jakcam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2008, 19h33   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Déjà tu peux simplifier. Essaye :
Code :
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
CREATE OR REPLACE TRIGGER puni
BEFORE INSERT
ON emprunt
FOR EACH ROW
 
DECLARE
erreur_v EXCEPTION;
date_emprunt_v DATE;
date_retour_v DATE;
date_v DATE;
 
BEGIN 
 
SELECT NVL(date_emprunt,SYSDATE),NVL(date_retour,SYSDATE) 
  INTO date_emprunt_v,date_retour_v
  FROM ( SELECT * FROM emprunt ORDER BY date_emprunt)
 WHERE num_inscr = :new.num_inscr AND ROWNUM = 1;
 
date_v := TO_DATE(date_emprunt_v) + 15;
 
IF( date_v < date_retour_v) THEN RAISE erreur_v; END IF;
 
EXCEPTION
WHEN erreur_v THEN
RAISE_APPLICATION_ERROR(-20003,'tu es puni, pas le droit d'emprunter un livre tout de suite');
END;
Cela générera la même erreur, recherche le mot emprunter, tu devrais trouver le problème tout seul

PS : une simple lecture du code dans ce forum avec la coloration syntaxique devrait même t'aider à comprendre
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h37.


 
 
 
 
Partenaires

Hébergement Web