IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

DELIMITER refusé quelque soit le séparateur


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 15
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ERROR: Ponctuation invalide @ 11
    STR: //
    SQL: DELIMITER //
    La commande me renvoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #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.

  2. #2
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 636
    Par défaut
    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.

    Mes tutos

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 15
    Par défaut
    Merci,
    Mais! j'ai bien évidemment tout essayé.
    De toutes façons, tant que le ; ne fonctionnera pas, aucun autre ne devrait fonctionner.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    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.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 15
    Par défaut
    Merci
    Tous les phpMyAdmin ne proposent pas l'option du délimiteur, et pas le mien (chez OVH).

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    dans ce cas, il ne te reste plus qu'à passer par mysql_query (sans DELIMITER).

  7. #7
    Membre averti
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 27
    Par défaut
    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

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 15
    Par défaut
    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...?).

  9. #9
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    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).

  10. #10
    Membre averti
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 27
    Par défaut
    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

  11. #11
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $bdd = mysql_connect...
    mysql_select...
    $sql = "create trigger..." ;
    mysql_query($sql, $bdd) or die(mysql_error($bdd)) ;

  12. #12
    Membre averti
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 27
    Par défaut
    Merci Antoun!

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

    Voici mon code php (CreateTrigger.php):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  13. #13
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 287
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

  14. #14
    Membre averti
    Femme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2007
    Messages : 27
    Par défaut


    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JDOM] Obtenir un élément quelque soit sa profondeur
    Par totoranky dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 11/10/2006, 14h40
  2. [VB] ouvrir un fichier quelque soit son extension.
    Par gopal dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 05/05/2006, 20h59
  3. Réponses: 4
    Dernier message: 18/01/2006, 17h04
  4. Etirer le bacground quelque soit la résolution de l'écran
    Par hikosaijuro dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 07/09/2005, 14h39
  5. Réponses: 2
    Dernier message: 05/08/2005, 09h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo