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 15/11/2007, 11h52   #1
Membre habitué
 
Avatar de Ashgenesis
 
Développeur Web
Inscription : mai 2004
Messages : 183
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2004
Messages : 183
Points : 138
Points : 138
Par défaut Syntaxe de l'instruction IF

Bonjour, j'ai quelques difficultées avec une syntaxe SQL qui me paraît pourtant simple.

Je souhaite avoir 2 requêtes différentes suivant si ma table est vide ou non
Ma syntaxe est la suivante, je sais qu'elle est fausse mais je ne trouve pas la solution, j'ai eu beau regarder les docs, la faq, et les tutos même certains codes sources SQL, je ne vois pas comment je pourrais faire ça.
Code :
1
2
3
4
5
6
7
8
LOCK TABLE mytest WRITE;
IF (SELECT COUNT(*) FROM mytest WHERE gauche=1) = 0
THEN
INSERT INTO mytest (gauche, droite, libelle) VALUES (1,2,'bonjour');
ELSE
INSERT INTO mytest (gauche, droite, libelle) VALUES (1,2,'hello');
END IF
UNLOCK TABLE;
Je suis preneur de toutes suggestions pouvant me sortir de cette impasse
Merci
Ashgenesis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2007, 14h27   #2
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
IF ... THEN
ELSEIF ... THEN
END IF;

Le point virgule
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2007, 14h38   #3
Membre habitué
 
Avatar de Ashgenesis
 
Développeur Web
Inscription : mai 2004
Messages : 183
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2004
Messages : 183
Points : 138
Points : 138
Effectivement, j'ai oublié le ; merci, mais cela ne résoud cependant pas le problème, j'ai toujours une erreur de syntaxe que je n'arrive pas à identifier.

http://dev.mysql.com/doc/refman/5.0/...statement.html

Le code est le même mais avec le ; à la fin du END IF

Code :
1
2
#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 'IF ((SELECT COUNT(*) FROM mytest WHERE gauche=1) = 0) THEN
INSERT INTO mytest (' at line 1
Ashgenesis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2007, 14h47   #4
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Est ce que tu tente de faire cela en dehors d'une fonction ou procédure stocké ?
Car, je viens de faire le test est j'avais oublié cette particularité ou il est pas possible d'utiliser de IF
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2007, 15h03   #5
Membre habitué
 
Avatar de Ashgenesis
 
Développeur Web
Inscription : mai 2004
Messages : 183
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2004
Messages : 183
Points : 138
Points : 138
Oui c'est le cas c'est bien en dehors de toutes fonctions ou procédures. Comment puis-je donc modifier mon code de manière à ce que cela soit fonctionnel.

Je sais que ma table sera vide si le champ gauche ne contient pas la valeur 1
Si ma table est vide j'ai une instruction d'INSERT assez simple par contre si elle n'est pas vide alors j'ai une suite d'instruction à effectuer.
Ashgenesis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2007, 15h07   #6
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Execute-le dans une fonction ou procédure stocké. C'est bien plus propre et plus optimisé.
Je sais pas quel language que tu utilises mais après il suffit de l'appeler ainsi :
CALL monProceStocl();
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2007, 15h29   #7
Membre habitué
 
Avatar de Ashgenesis
 
Développeur Web
Inscription : mai 2004
Messages : 183
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2004
Messages : 183
Points : 138
Points : 138
C'est un script bash pour la modification d'une table en représentation intervallaire.

L'objectif est de pouvoir insérer un noeud dans cette table n'importe où. Le langage shell m'est imposé, je ne peux faire autrement. Il faut donc pouvoir créer un noeud "racine" si la table est vide et rajouter d'autres noeud par la suite.

Je vais voir pour les fonctions et procédures, merci

[edit]Correction d'une horrible faute d'orthographe [/edit]
Ashgenesis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2007, 15h34   #8
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Il va rien changé à ton script. C'est juste qu'il faudra l'encapsuler dans une fonction ou procédure stocké. A condition, biensur, que tu sois sur Mysql5
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2007, 15h54   #9
Membre habitué
 
Avatar de Ashgenesis
 
Développeur Web
Inscription : mai 2004
Messages : 183
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2004
Messages : 183
Points : 138
Points : 138
Je pense que ça devrait aller alors
Code :
mysql  Ver 14.12 Distrib 5.0.38, FOR pc-linux-gnu (i486) USING readline 5.2
C'est la première fois que j'utilise les fonctions et procédures stockées je vais donc aller lire un peu de doc avant.

Merci.
Ashgenesis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/11/2007, 15h55   #10
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Citation:
Envoyé par Ashgenesis Voir le message
Je pense que ça devrait aller alors
Code :
mysql  Ver 14.12 Distrib 5.0.38, FOR pc-linux-gnu (i486) USING readline 5.2
C'est la première fois que j'utilise les fonctions et procédures stockées je vais donc aller lire un peu de doc avant.

Merci.
Il faut quand même que je t'explique. Quand t'y touche c'est difficile de s'en passer
__________________
Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2007, 15h42   #11
Membre habitué
 
Avatar de Ashgenesis
 
Développeur Web
Inscription : mai 2004
Messages : 183
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2004
Messages : 183
Points : 138
Points : 138
Merci pour tous
Ashgenesis 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 07h27.


 
 
 
 
Partenaires

Hébergement Web