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 13/12/2007, 11h49   #1
Invité de passage
 
Inscription : décembre 2005
Messages : 15
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 15
Points : 4
Points : 4
Par défaut DELIMITER refusé quelque soit le séparateur

Bonjour,
J'ai MySQL 5.0.44-log chez OVH et utilise un phpMyAdmin indiquant Version du client MySQL: 5.0.32.

La commande me renvoie
Code :
1
2
3
ERROR: Ponctuation invalide @ 11
STR: //
SQL: DELIMITER //
La commande me renvoie
Code :
#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 'DELIMITER' at line 1
Que faire?
J'ai besoin de créer des procédures stockés et suis bien bloqué...
Merci.
edid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 15h04   #2
Rédactrice
 
Avatar de Fleur-Anne.Blain
 
Inscription : juillet 2006
Messages : 2 662
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 2 662
Points : 5 590
Points : 5 590
Test avec

avec un seul caractère.


Sinon prend un autre delimiter (| ou;....etc.)
__________________
la culture c'est comme la confiture moins on en a plus on l'étale.

Vous souhaitez contribuer aux rubriques Solutions d'entreprises ou BI, contactez-moi

Mes tutos
Fleur-Anne.Blain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 15h50   #3
Invité de passage
 
Inscription : décembre 2005
Messages : 15
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 15
Points : 4
Points : 4
Merci,
Mais! j'ai bien évidemment tout essayé.
De toutes façons, tant que le ; ne fonctionnera pas, aucun autre ne devrait fonctionner.
edid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2007, 21h38   #4
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
La commande DELIMITER est propre au client texte mysql et ne fonctionne donc pas dans phpMyAdmin. En bas à gauche de ta fenêtre SQL, tu peux préciser le délimiteur.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2007, 01h24   #5
Invité de passage
 
Inscription : décembre 2005
Messages : 15
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 15
Points : 4
Points : 4
Merci
Tous les phpMyAdmin ne proposent pas l'option du délimiteur, et pas le mien (chez OVH).
edid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2007, 12h24   #6
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
dans ce cas, il ne te reste plus qu'à passer par mysql_query (sans DELIMITER).
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 15h00   #7
Candidat au titre de Membre du Club
 
Inscription : décembre 2007
Messages : 27
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : décembre 2007
Messages : 27
Points : 13
Points : 13
Salut edid!

As tu trouvé la solution à ce pb? J'ai exactement le même. J'utilise phpMyAdmin et j'ai vraiment besoin de trigger...

SVP. Merci d'avance.

Audrey
Ptit_bouchon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 16h02   #8
Invité de passage
 
Inscription : décembre 2005
Messages : 15
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 15
Points : 4
Points : 4
Bonjour,
Au final, je me suis créé une page d'exécution de requête SQL. Je n'exécute plus de commandes multiples, donc pas besoin de DELIMETER (ou bien j'ai mis mon propre délimiteur...?).
edid est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 16h07   #9
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Citation:
Envoyé par edid Voir le message
Bonjour,
Au final, je me suis créé une page d'exécution de requête SQL. Je n'exécute plus de commandes multiples, donc pas besoin de DELIMETER (ou bien j'ai mis mon propre délimiteur...?).
pas besoin de DELIMITER avec mysql_query. Cette commande n'existe que dans le client texte (mysql.exe).
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 17h08   #10
Candidat au titre de Membre du Club
 
Inscription : décembre 2007
Messages : 27
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : décembre 2007
Messages : 27
Points : 13
Points : 13
Merci pour ton aide, mais je ne comprends pas très bien de quelle manière tu t'y es pris.

Je dois effectuer toutes les requêtes de mon trigger séparement? Mais comment faire pour qu'elles s'exécutent en un seul bloc lorsque je ferais un insert par exemple?

Après celà mon trigger sera-t-il opérationnel? Ou faudra-t-il faire les mêmes vérifications via le prg à chaque fois?!

Désolée du dérangement...

Audrey
Ptit_bouchon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2008, 18h51   #11
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
tu dois créer le trigger en une seule requête, dans une page PHP que tu n'appelera que pour créer (ou re-créer) le trigger.

par ex., creatrigger.php :

Code :
1
2
3
4
5
 
$bdd = mysql_connect...
mysql_select...
$sql = "create trigger..." ;
mysql_query($sql, $bdd) OR die(mysql_error($bdd)) ;
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2008, 10h43   #12
Candidat au titre de Membre du Club
 
Inscription : décembre 2007
Messages : 27
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : décembre 2007
Messages : 27
Points : 13
Points : 13
Merci Antoun!

J'ai testé ta solution mais ça ne fonctionne pas...

Voici mon code php (CreateTrigger.php):
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
34
35
36
37
<?php
//Connection au serveur:
$link = mysql_connect('monServeur', 'developer', 'pwd'); 
IF (!$link) { 
	die('Impossible de se connecter au serveur : ' . mysql_error());
} else {
	echo('Connection au serveur OK! <br /><br />');
}
 
//Rendre la base de données dmi, la base courante:
$db_selected = mysql_select_db('dmi', $link);
IF (!$db_selected) {
	die('Impossible de sélectionner la base de données : ' . mysql_error());
} else {
	echo('Selection de la base de données OK! <br /><br />');
}
 
//Requête SQL:
$sql = 'CREATE TRIGGER trg_IncrementationNoObserv BEFORE INSERT ON OBSERV FOR EACH ROW
BEGIN
DECLARE _no TINYINT;
DECLARE _nb INT;
SELECT _nb = COUNT(*) FROM OBSERV WHERE Article = NEW.Article GROUP BY Article;
IF (_nb>=1) THEN
	SELECT _no = MAX(NoObserv) + 1 FROM OBSERV WHERE Article = NEW.Article;
ELSE
	SET _no = 1;
END IF;
SET NEW.NoObserv = _no;
END;';
 
//Exécution de la requête:
mysql_query($sql, $link) OR die(mysql_error($link));
 
//Fermeture de la connection:
mysql_close($link);
?>
Lorsque je l'exécute j'obtiens le message suivant:
Code :
1
2
3
4
5
Connection au serveur OK! 
 
Selection de la base de données OK! 
 
NOT allowed TO RETURN a result SET FROM a TRIGGER
Puis si je fais un 'show triggers;' je n'obtiens aucun résultat. J'ai l'impression que le trigger n'a pas été créé...

As tu une idée d'où vient mon problème?!

Audrey
Ptit_bouchon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2008, 11h06   #13
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Oui, et le message d'erreur est explicite : dans un trigger, tu n'as pas le droit de faire des SELECT envoyés à la sortie standard.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TRIGGER trg_IncrementationNoObserv BEFORE INSERT ON OBSERV FOR EACH ROW
BEGIN
DECLARE _no TINYINT;
DECLARE _nb INT;
SET _nb = (SELECT COUNT(*) FROM OBSERV WHERE Article = NEW.Article GROUP BY Article) ;
IF (_nb>=1) THEN
	SET _no = (SELECT MAX(NoObserv) + 1 FROM OBSERV WHERE Article = NEW.Article) ;
ELSE
	SET _no = 1;
END IF;
SET NEW.NoObserv = _no;
END;
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2008, 14h18   #14
Candidat au titre de Membre du Club
 
Inscription : décembre 2007
Messages : 27
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : décembre 2007
Messages : 27
Points : 13
Points : 13


Merci milles fois pr ton aide qui m'a été très précieuse...

Celà fait plusieurs jour que je m'arrache les cheveux sur ces triggers!

Et enfin, ça fonctionne!!!

Audrey
Ptit_bouchon 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 02h29.


 
 
 
 
Partenaires

Hébergement Web