Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Administration
Administration Forum d'entraide sur l'administration du serveur 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 01/03/2008, 17h27   #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 problème avec les triggers

J'ai un TP en BDD qui consiste à creer une trigger pour empecher qu'un soit emprunter deux fois sans qu'il est était rendu.
Voici mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
CREATE OR REPLACE TRIGGER trigemprunt
BEFORE INSERT
ON emprunt
FOR EACH ROW 
 
DECLARE
erreur_v EXCEPTION;
 
BEGIN
 
IF (num_livre = :new.num_livre AND date_retour IS NULL) THEN
RAISE erreur_v;
END IF;
 
EXCEPTION
 WHEN erreur_v THEN
 RAISE_APPLICATION_ERROR(-20001,'pas le droit d'emprunter un livre déjà emprunter');
 
END;
ET j'obtiens l'erreur suivante:
Citation:
ERROR at line 12: 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 trigemprunt
2. BEFORE INSERT
3. ON emprunt
Petite précision j'utilise oracle 10g
Merci d'avance de votre aide. Bonne journée à tous
jakcam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2008, 18h35   #2
Membre actif
 
Étudiant
Inscription : février 2008
Messages : 224
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2008
Messages : 224
Points : 185
Points : 185
Salut,

Tu as une apostrophe dans la chaîne que tu veux afficher en cas d'erreur, il faut que tu la protège en la doublant.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
CREATE OR REPLACE TRIGGER trigemprunt
BEFORE INSERT
ON emprunt
FOR EACH ROW 
 
DECLARE
erreur_v EXCEPTION;
 
BEGIN
 
IF (num_livre = :new.num_livre AND date_retour IS NULL) THEN
RAISE erreur_v;
END IF;
 
EXCEPTION
 WHEN erreur_v THEN
 RAISE_APPLICATION_ERROR(-20001,'pas le droit d''emprunter un livre déjà emprunter');
 
END;
Milo59000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2008, 19h24   #3
Nouveau Membre du Club
 
Inscription : mars 2008
Messages : 66
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 66
Points : 35
Points : 35
Merci bcp de ton aide mais j'ai une autre erreur pourrait tu encore une fois m'aider:

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
 
CREATE OR REPLACE TRIGGER trigemprunt
BEFORE INSERT
ON emprunt
FOR EACH ROW 
 
DECLARE
erreur_v EXCEPTION;
num_livre_v NUMBER;
 
BEGIN
 
num_livre_v := (SELECT num_livre
                FROM emprunt
                WHERE :new.num_livre = num_livre AND date_retour IS NULL);
 
IF (num_livre_v = :new.num_livre AND date_retour IS NULL) THEN
RAISE erreur_v;
END IF;
 
EXCEPTION
 WHEN erreur_v THEN
 RAISE_APPLICATION_ERROR(-20001,'pas le droit d''emprunter un livre déjà emprunter');
 
END;
et mon erreur
Citation:
ERROR at line 19: PLS-00103: Symbole "end-of-file" rencontré à la place d'un des symboles suivants : end not pragma final instantiable order overriding static member constructor map

1. CREATE OR REPLACE TRIGGER trigemprunt
2. BEFORE INSERT
3. ON emprunt
Merci encore une fois de votre aide .
PS: si tu penses que je m'y prend mal, pourrait tu m'indiquer une autre méthode stp?
jakcam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2008, 21h06   #4
Membre confirmé
 
Avatar de DAB.cz
 
Inscription : octobre 2006
Messages : 221
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 221
Points : 214
Points : 214
1/ il faut coler l'erreur complet:
Code :
1
2
3
7/17     PLS-00103: ... "SELECT" ...
9/73     PLS-00103: ... ")" ...
19/4     PLS-00103: ... "end-of-file" ...
2/ un déclencheur valid ("select into" à la place de ":= (select"), mais pas logique et correct:
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
CREATE OR REPLACE TRIGGER trigemprunt
BEFORE INSERT
ON emprunt
FOR EACH ROW 
 
DECLARE
erreur_v EXCEPTION;
num_livre_v NUMBER;
 
BEGIN
 
SELECT num_livre INTO num_livre_v
  FROM emprunt
  WHERE :new.num_livre = num_livre AND date_retour IS NULL;
 
IF (num_livre_v = :new.num_livre) THEN
RAISE erreur_v;
END IF;
 
EXCEPTION
 WHEN erreur_v THEN
 RAISE_APPLICATION_ERROR(-20001,'pas le droit d''emprunter un livre déja emprunter');
 
END;
DAB
DAB.cz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/03/2008, 11h37   #5
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Juste pour info : On dit
Citation:
pas le droit d'emprunter un livre déjà emprunté
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h02.


 
 
 
 
Partenaires

Hébergement Web