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 :

petit probleme de procédure


Sujet :

SQL Procédural MySQL

  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2012
    Messages : 93
    Par défaut petit probleme de procédure
    bonjour,

    j'ai une procédure d'importation
    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
    DELIMITER |
    DROP PROCEDURE IF EXISTS import_donnees|
    CREATE PROCEDURE import_donnees()
    BEGIN
    SET @myInsert:= CONCAT('
    INSERT INTO relever_mesure(moyenne, minimum, maximum, id_calendrier_calendrier,
    id_station_Stations, id_capteur_capteur)
    SELECT i.moyenne,
    i.minimum,
    i.maximum,
    d.id_calendrier,
    i.id_station,
    c.id_capteur
    FROM import i
    INNER JOIN calendrier d ON i.date_heure = d.date_heure_locale
    INNER JOIN capteur c ON i.capteur=c.libelle ;
    ');
    prepare stmnt FROM @myInsert;
    EXECUTE stmnt;
    DEALLOCATE PREPARE stmnt;
    END ;
    avec cette procédure si jamais une ligne existe déjà ça plante, donc je voulais à partir de cette dernière créer une autre procédure pour importer mais remplacer les valeurs moyenne, minimum et maximum .

    en me basant sur une procédure similaire je pensais que ce qui suit marcherais mais ce n'est pas le cas
    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
    DELIMITER |
    DROP PROCEDURE IF EXISTS import_update|
    CREATE PROCEDURE import_update()
    BEGIN
    SET @myInsert:= CONCAT('
    INSERT INTO relever_mesure(moyenne, minimum, maximum, id_calendrier_calendrier,
    id_station_Stations, id_capteur_capteur)
    SELECT i.moyenne,
    i.minimum,
    i.maximum,
    d.id_calendrier,
    i.id_station,
    c.id_capteur
    FROM import i
    INNER JOIN calendrier d ON i.date_heure = d.date_heure_locale
    INNER JOIN capteur c ON i.capteur=c.libelle ;
    ON DUPLICATE KEY UPDATE moyenne=VALUES(moyenne),
    minimum=VALUES(minimum),maximum=VALUES(maximum)
    ');
    prepare stmnt FROM @myInsert;
    EXECUTE stmnt;
    DEALLOCATE PREPARE stmnt;
    END ;
    si quelqu'un peut m'aider ...
    merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2012
    Messages : 93
    Par défaut
    j'ai essayer avec plusieurs tournure pour le ON DUPLICATE KEY UPDATE

    je ne comprend pas pourquoi ça ne marche pas j'ai dans une autre procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON DUPLICATE KEY UPDATE valeur=VALUES(valeur)
    et ça marche nickel, dans cette base j'ai 3 colonnes (moyenne, minimum et maximum) alors que dans l'autre je n'en avais qu'une (valeur).

    quelque soit la tournure que je prenne j'ai une erreur de syntaxe a chaque fois ...

  3. #3
    Membre Expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Billets dans le blog
    1
    Par défaut
    salut,

    déjà pour une requête préparée et un concat pour faire ça?

    en plus le end doit être suivit du | pour qu'il termine la procédure:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DELIMITER |
    DROP PROCEDURE IF EXISTS import_donnees|
    CREATE PROCEDURE import_donnees()
    BEGIN
      INSERT INTO relever_mesure(moyenne, minimum, maximum, id_calendrier_calendrier, id_station_Stations, id_capteur_capteur)
      SELECT i.moyenne, i.minimum, i.maximum, d.id_calendrier, i.id_station, c.id_capteur
        FROM import i
        INNER JOIN calendrier d ON i.date_heure = d.date_heure_locale
        INNER JOIN capteur c ON i.capteur=c.libelle
      on duplicate key update moyenne=values(moyenne), minimum=values(minimum), maximum=values(maximum);
    end|
    delimiter ;
    ça devrait faire ce que tu veux...

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juillet 2012
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Juillet 2012
    Messages : 93
    Par défaut
    ok merci

    vi je m'étais basé sur une autre requête pour faire la suivante qui etais beaucoup plus simple en faite.

    ça marche nickel

    Merci

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

Discussions similaires

  1. Petit problème de fork
    Par osmose22 dans le forum Linux
    Réponses: 7
    Dernier message: 18/03/2007, 21h10
  2. [TP]petit probleme avec solution
    Par pompompolom dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 02/12/2004, 19h48
  3. petit probleme avec l'éditeur de builder
    Par qZheneton dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/10/2004, 16h19
  4. petit probleme de requete
    Par nico33307 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 25/08/2004, 11h36
  5. petit probleme dans une requte POSTGRE SQL
    Par ghis le fou dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2003, 13h51

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