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

PHP & Base de données Discussion :

Procedure MySQL [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Liban

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2014
    Messages : 38
    Par défaut Procedure MySQL
    Bonsoir,
    J'ai deja un procedure sql qui marche correctement, qui sert a prend des variables d'une page PHP, et les ajoutent dans une table sql (J'utilise Mysql Workbench 6.1).
    Mais il, parfois, faire insert pour la meme "row" meme s'il existe. Alors j'ai re-ecrire le meme procedure avec la condition if not exists:
    Code sql : 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
    -- --------------------------------------------------------------------------------
    -- Routine DDL
    -- Note: comments before and after the routine body will not be stored by the server
    -- --------------------------------------------------------------------------------
    DELIMITER $$
     
    CREATE DEFINER=`root`@`localhost` PROCEDURE `note_avg`(OUT numberOfStudents INT ,OUT avg_result decimal, IN courseId INT, IN semester INT, IN classOf VARCHAR(20))
    IF NOT exists(
    select * from average 
    	where course_id=courseId AND semester=semester AND year=classOf
    )
    BEGIN
    SELECT COUNT(*) INTO numberOfStudents FROM notes WHERE course_id=courseId AND semester=semester AND year=classOf;
    SELECT avg(final_note) INTO avg_result FROM notes WHERE course_id=courseId AND semester=semester AND year=classOf;
    INSERT INTO average(course_id, average, semester, classOf, numberOfStudents) VALUES (courseId, avg_result, semester,  classOf, numberOfStudents); 
    END

    L'erreur:
    ERROR 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 'BEGIN
    J'ai obtenu une erreur sur BEGIN.
    Est-ce quelqu'un peut savoir ou la probleme ? Et comment je peut utiliser un curseur avec IF NOT EXISTS.
    Merci.

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    et si tu descendais le test dans le BEGIN ?
    Quelque chose comme ça : IF () THEN ... ELSE ... END IF;

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Liban

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2014
    Messages : 38
    Par défaut
    Mr. Je veux ce procedure d'ajouter la requette si "row n'existe pas. Else, si elle exist, je veux faire un update de cette row.
    Le procedure qui marche correctement est:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    -- --------------------------------------------------------------------------------
    -- Routine DDL
    -- Note: comments before and after the routine body will not be stored by the server
    -- --------------------------------------------------------------------------------
    DELIMITER $$
     
    CREATE DEFINER=`root`@`localhost` PROCEDURE `note_avg`(OUT numberOfStudents INT ,OUT avg_result decimal, IN courseId INT, IN semester INT, IN classOf VARCHAR(20))
    BEGIN
    SELECT COUNT(*) INTO numberOfStudents FROM notes WHERE course_id=courseId AND semester=semester AND year=classOf;
    SELECT avg(final_note) INTO avg_result FROM notes WHERE course_id=courseId AND semester=semester AND year=classOf;
    INSERT INTO average(course_id, average, semester, classOf, numberOfStudents) VALUES (courseId, avg_result, semester,  classOf, numberOfStudents); 
    END
    Mais lorsque j'ajoute les conditions IF NOT EXIST j'obtien l'erreur sur BEGIN.
    Merci.

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Quelque chose dans ce genre :
    Code sql : 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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    CREATE DEFINER=`root`@`localhost` PROCEDURE `note_avg`(
        OUT numberOfStudents INT, 
        OUT avg_result DECIMAL, 
        IN  courseId INT, 
        IN  semester INT, 
        IN classOf VARCHAR(20)
    )
    BEGIN
        IF EXISTS (
            SELECT 1 
              FROM average 
             WHERE course_id    = courseId 
                   AND semester = semester 
                   AND `year`   = classOf
        ) THEN
     
            UPDATE ...
     
        ELSE
     
            SELECT COUNT(*) INTO numberOfStudents 
              FROM notes 
             WHERE course_id    = courseId 
                   AND semester = semester 
                   AND `year`   = classOf;
     
     
            SELECT avg(final_note) INTO avg_result 
              FROM notes 
             WHERE course_id    = courseId 
                   AND semester = semester 
                   AND `year`   = classOf;
     
     
            INSERT INTO average (
                course_id, 
                average, 
                semester, 
                classOf, 
                numberOfStudents
            ) VALUES (
                courseId, 
                avg_result, 
                semester,  
                classOf, 
                numberOfStudents
            ); 
     
        END IF;
    END

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2014
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Liban

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2014
    Messages : 38
    Par défaut
    MySQL said: 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 'ELSE

    SELECT COUNT(*) INTO numberOfStudents
    FROM notes

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Poste la requête complète avec le UPDATE

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

Discussions similaires

  1. Erreur procedure MySQL
    Par arthur.sw dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 12/10/2010, 12h49
  2. erreur procedure MYSQL
    Par taoufiqENSIAS dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 09/04/2008, 13h35
  3. [MySQL] Procedure mysql et execution
    Par estacado dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 12/01/2008, 09h05
  4. pb de creation procedure Mysql via java
    Par metos00 dans le forum JDBC
    Réponses: 1
    Dernier message: 09/07/2007, 10h33
  5. Procedure MySQL 5.0 impossible depuis PhpMyAdmin ?
    Par Arvulis dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 20/09/2006, 17h51

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