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 :

syntaxe sur une procédure et un évènement


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Par défaut syntaxe sur une procédure et un évènement
    Bonjour,

    Je souhaite créer un programmateur d'évènement qui exécute une procédure sur une table toutes ls 20 minutes

    La table en question est :
    tblconnexion
    dont 3 champs sont utilisés :
    - date_lastconnexion DATETIME
    - date_intermediaire DATETIME
    - enligne int

    Voici le code mysql qui produit une erreur !
    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
     
    CREATE PROCEDURE SetInitialisation()
    BEGIN
    	DECLARE d1 DATETIME;
    	DECLARE d2 DATETIME;
    	SELECT date_lastconnexion, date_intermediaire INTO d1,d2
    	FROM tblconnexion 
    	WHERE enligne=1;
    	IF (d2 - CURRENT_TIMESTAMP >1200)
    		UPDATE tblconnexion SET enligne=0, date_lastconnexion = NOW()
    	ELSE
    		UPDATE tblconnexion SET date_intermediaire = NOW()
    	END IF;
    END;
     
     
    CREATE EVENT IF NOT EXISTS EventInitialisation() 
    ON SCHEDULE EVERY 20 MINUTE 
    ENABLE 
    DO CALL SetInitialisation();
    L'erreur signalé est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    requête SQL: 
     
    CREATE PROCEDURE SetInitialisation( ) BEGIN DECLARE d1 DATETIME 
    MySQL a répondu: 
     
    #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 3
    Je ne vois pas l'origine de l'erreur . Pouvez-vous m'aider, svp?

    Merci

  2. #2
    Membre confirmé
    Femme Profil pro
    Database
    Inscrit en
    Juin 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Database

    Informations forums :
    Inscription : Juin 2010
    Messages : 125
    Par défaut
    Bonjour,

    Avez-vous modifier le delimiter??? car je crois que c'est juste le ';' gère une erreure...

    Bonne recherche

  3. #3
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Par défaut
    Bonjour,

    Comme vous, j'ai pensé à DELIMITER ! Mais sans plus de succès !

    En fait, en recherchant sur le net, je me suis rendu compte que le trouble proviendrait de la console phpMyAdmin qui est doté de certaines restrictions entre autres celles d'exécuter des requêtes sur les procédutres stockées

    Bref, il semblerait que ma syntaxe ne soit pas mauvaise sauf, comme vous venez de l'indiquer, la définition de DELIMITER. Le code deviendrait ainsi :
    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
     
    DELIMITER $$
    CREATE PROCEDURE SetInitialisation()
    BEGIN
    	DECLARE d2 DATETIME;
    	SELECT date_lastconnexion, date_intermediaire INTO d1,d2
    	FROM tblconnexion 
    	WHERE enligne=1;
    	IF (d2 - CURRENT_TIMESTAMP >1200)
    		UPDATE tblconnexion SET enligne=0, date_lastconnexion = NOW()
    	ELSE
    		UPDATE tblconnexion SET date_intermediaire = NOW()
    	END IF;
    END$$
     
    DELIMITER ;
    Apparemment, une solution serait de forcer l'exécution de loa requête via php et mysql_query().
    Il faut que j'essaye.

  4. #4
    Membre confirmé
    Femme Profil pro
    Database
    Inscrit en
    Juin 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Database

    Informations forums :
    Inscription : Juin 2010
    Messages : 125
    Par défaut
    Bonjour,

    Je viens de tester votre procédure "SetInitialisation", il y une erreur de syntaxe au niveau du if (désolé de ne pas l'avoir remarqué hier )...

    Remplacer votre bloc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IF (d2 - CURRENT_TIMESTAMP >1200)
    		UPDATE tblconnexion SET enligne=0, date_lastconnexion = NOW()
    	ELSE
    		UPDATE tblconnexion SET date_intermediaire = NOW()
    	END IF;
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IF (d2 - CURRENT_TIMESTAMP >1200) THEN
    		UPDATE tblconnexion SET enligne=0, date_lastconnexion = NOW();
    	ELSE
    		UPDATE tblconnexion SET date_intermediaire = NOW();
    	END IF;
    Voilà pour la première partie, pour ce qui est de la création de l'évenement 'EventInitialisation', si votre problème persiste, je regarderai mais je suis bien obligé d'avouer que je n'en n'ai jamais créer....

    Bonne recherche

  5. #5
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Par défaut
    Oui en effet, vous avez vu juste !

    L'utilisation des procédures avec phpmyadmin n'est pas directement possible via la console.

    Donc je suis passé par un fichier php standard :
    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
    <?php
    mysql_query("CREATE PROCEDURE setinitialisation()  
    BEGIN 
    	DECLARE d_1 DATETIME; 
    	SELECT date_intermediaire INTO d_1 FROM tblconnexion WHERE enligne=1; 
    	IF (d_1 - CURRENT_TIMESTAMP >1200) THEN
    		UPDATE tblconnexion SET enligne=0, date_lastconnexion = NOW(); 
    	ELSE 
    		UPDATE tblconnexion SET date_intermediaire = NOW(); 
    	END IF; 
    END
    ")or die(mysql_error());
     
     $rs = mysql_query('SHOW PROCEDURE STATUS LIKE "setinitialisation";') or die(mysql_error());
     while($row = mysql_fetch_row($rs))
    {
     print_r($row);
     }
    ?>
    Le retour est correct. La procédure est ancrée sur la base de données.

    Merci pour votre aide.

  6. #6
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Par défaut
    Pour ce qui est de l'évènement, je reste sur ma faim ... de nouveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE EVENT IF NOT EXISTS eventinitialisation
    ON SCHEDULE EVERY 20 MINUTE 
     
    DO CALL SetInitialisation();
    me retourne l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 'EVENT eventinitialisation ON SCHEDULE EVERY 20 MINUTE DO CALL setinitialisa' at line 1

Discussions similaires

  1. Un événement sur une procédure externe
    Par Pedro dans le forum Composants VCL
    Réponses: 4
    Dernier message: 27/03/2013, 15h06
  2. Erreur de syntaxe sur une requête paramétrée
    Par deglingo37 dans le forum Access
    Réponses: 5
    Dernier message: 16/05/2006, 22h21
  3. Gros Pb de perf sur une procédure stockée
    Par El Riiico dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 05/05/2006, 15h51
  4. Réponses: 2
    Dernier message: 25/06/2005, 17h28
  5. Réponses: 4
    Dernier message: 14/06/2004, 16h18

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