Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
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 08/06/2011, 16h34   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 15
Points : 2
Points : 2
Par défaut Mysql: Problème de trigger

Bonjour,

J'ai créé deux tables:

Code :
1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE instance (
id_instance int(11) NOT NULL AUTO_INCREMENT,
nom varchar(30),
PRIMARY KEY (`id_instance`)
);
 
CREATE TABLE aud (
id_aud int(11) NOT NULL AUTO_INCREMENT,
etat varchar(30),
PRIMARY KEY (`id_aud`)
);
Code :
1
2
3
4
5
6
7
8
DELIMITER$
CREATE TRIGGER trig_instance_orcale AFTER INSERT ON instance
FOR EACH ROW
BEGIN
	IF (NEW.id_instance='oracle') THEN
	INSERT INTO aud(id_instance) VALUES (NEW.id_instance);
	END IF;
END$


et je veux créer un trigger qui insère dans aud les instances insérées qui ont comme nom oracle. Malheureusement ça ne marche pas et je ne vois pas l'erreur.
Je vous remercie d'avance.
yoshimitsu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/06/2011, 17h09   #2
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Qu'est-ce qui ne marche pas ?

MySQL ne veut pas créer le trigger ?
Le trigger est crée mais ne fonctionne pas ?

Déjà, comparer un INT(11) avec une chaine ('oracle')
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 10h11   #3
Invité de passage
 
Inscription : janvier 2011
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 15
Points : 2
Points : 2
Excuse moi je me suis trompé voila le nouveau code:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE instance (
id_instance int(11) NOT NULL AUTO_INCREMENT,
nom varchar(30),
PRIMARY KEY (`id_instance`)
);
 
CREATE TABLE aud (
id_aud int(11) NOT NULL AUTO_INCREMENT,
id_instance int(11),
etat varchar(30),
PRIMARY KEY (`id_aud`)
);
Code :
1
2
3
4
5
6
7
8
DELIMITER$
CREATE TRIGGER trig_instance_orcale AFTER INSERT ON instance
FOR EACH ROW
BEGIN
	IF (NEW.nom='oracle') THEN
	INSERT INTO aud(id_instance) VALUES (NEW.id_instance);
	END IF;
END;$
Alors le soucis c'est que les tables se créent sans problème. Par contre au niveau du trigger voila l'erreur que phpmyadmin m'affiche:

Erreur

requête SQL:

Code :
1
2
3
4
5
6
7
8
9
CREATE TRIGGER trig_instance_orcale AFTER INSERT ON instance
FOR EACH
ROW
BEGIN IF( NEW.nom = 'oracle' )
THEN
INSERT INTO aud( id_instance )
VALUES (
NEW.id_instance
);
Citation:
MySQL a répondu : Documentation
#1064 - Erreur de syntaxe près de '' à la ligne 5
Donc je n'arrive pas à créer mon trigger.
yoshimitsu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 10h42   #4
Membre confirmé
 
Avatar de GyZmoO
 
Homme Mickaël
Ingénieur développement logiciels
Inscription : février 2006
Messages : 402
Détails du profil
Informations personnelles :
Nom : Homme Mickaël
Âge : 27
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : février 2006
Messages : 402
Points : 238
Points : 238
Envoyer un message via MSN à GyZmoO
Yo!

Try this :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
CREATE TABLE instance (
id_instance int(11) NOT NULL AUTO_INCREMENT,
nom varchar(30),
PRIMARY KEY (`id_instance`)
);
 
CREATE TABLE aud (
id_aud int(11) NOT NULL AUTO_INCREMENT,
id_instance int(11),
etat varchar(30),
PRIMARY KEY (`id_aud`)
);
 
DELIMITER |
CREATE TRIGGER trig_instance_orcale 
AFTER INSERT ON instance
FOR EACH ROW
BEGIN
IF (NEW.nom='oracle') THEN
INSERT INTO aud(id_instance) VALUES (NEW.id_instance);
END IF;
END; |
__________________
define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.
GyZmoO est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2011, 14h49   #5
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 853
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 853
Points : 1 332
Points : 1 332
oui tu as un problème de délimiteur de fin d'instruction
__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 11h39   #6
Invité de passage
 
Inscription : janvier 2011
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 15
Points : 2
Points : 2
Non cela ne marche pas. Il me dit:
Erreur

requête SQL:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
DELIMITER | CREATE TRIGGER trig_instance_orcale AFTER INSERT ON instance
FOR EACH
ROW
BEGIN IF( NEW.nom = 'oracle' )
THEN<div style="margin:20px; margin-top:5px; ">
	<div class="smallfont" style="margin-bottom:2px">Citation:</div>
	<TABLE cellpadding="6" cellspacing="0" border="0" width="100%">
	<tr>
		<td class="alt2" style="border:1px inset">
 
				INSERT INTO aud( id_instance )
VALUES (
(ici l'erreur) NEW.id_instance
);
 
END IF ;
 
END ;
 
		</td>
	</tr>
	</table>
</div>
Citation:

|

MySQL a répondu: Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '|' at line 8
yoshimitsu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 12h33   #7
Membre Expert
 
Homme Eric Dureuil
Développeur informatique
Inscription : avril 2011
Messages : 853
Détails du profil
Informations personnelles :
Nom : Homme Eric Dureuil
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 853
Points : 1 332
Points : 1 332
dans sa réponse il a oublié de virer l'ancien délimiteur:
Code sql :
1
2
3
4
5
6
7
8
9
10
DELIMITER |
CREATE TRIGGER trig_instance_orcale 
AFTER INSERT ON instance
FOR EACH ROW
BEGIN
IF (NEW.nom='oracle') THEN
INSERT INTO aud(id_instance) VALUES (NEW.id_instance);
END IF;
END|
delimiter ;
__________________
Eric Dureuil, développeur web, c/c++, java indépendant
soyons
pensez à mettre et
ericd69 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/06/2011, 16h06   #8
Invité de passage
 
Inscription : janvier 2011
Messages : 15
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 15
Points : 2
Points : 2
ça marche super bien !!!
merci ericd69
yoshimitsu 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 21h00.


 
 
 
 
Partenaires

Hébergement Web