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 :

SP on udpate


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2015
    Messages : 13
    Par défaut SP on udpate
    Bonjour à tous,

    J'ai besoin d'aide , je dois créer une SP en mysql 5.1

    voici le message du demandeur:


    --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    This is myisam table customer on offer warehouse offer_{country}_production

    We need a procedure that will accept the fields from customer and do something like:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO table (a,b,c) VALUES (1,2,3)
      ON DUPLICATE KEY UPDATE c=c+1;

    columns list is:
    +-------------------------+------------------+------+-----+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +-------------------------+------------------+------+-----+---------+-------+
    | customer_id | int(10) unsigned | NO | PRI | NULL | |
    | name | varchar(255) | NO | | NULL | |
    | url | varchar(255) | NO | | NULL | |
    | type | int(10) | NO | | NULL | |
    | costperclick | decimal(10,3) | NO | | NULL | |
    | priority | int(10) | NO | | NULL | |
    | status | int(10) | NO | | NULL | |
    | imported | datetime | YES | | NULL | |
    | product_id | int(10) unsigned | YES | | NULL | |
    | category_count | int(10) unsigned | NO | | 0 | |
    | mapping_count | int(10) unsigned | NO | | 0 | |
    | mapped_categories_count | int(10) unsigned | NO | | 0 | |
    +-------------------------+------------------+------+-----+---------+-------+

    Od duplicate key update values:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO `customer` (`customer_id`,`name`,`url`,`type`,`costperclick`,`priority`,`status`,`product_id`) VALUES (5036517,'camera-accushop.nl','http://www.camera-accushop.nl/',2,0.16,300,0,2344415) 
                        ON DUPLICATE KEY 
                        UPDATE `name`='camera-accushop.nl',`url`='http://www.camera-accushop.nl/',`type`=2,`costperclick`=0.16,`priority`=300,`status`=0,`product_id`=2344415,`customer_id`=5036517

    --------------------


    J'ai commencé comme ça: mais je suis débutant , merci de votre indulgence



    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
     USE offer_es_production; 
       DROP PROCEDURE IF EXISTS `sp_insert_customer` 
    GO 
     
    CREATE PROCEDURE sp_insert_customer 
     
     ( IN customer_id INT(10) UNSIGNED 
    , IN type INT(10) 
    , IN costperclick DECIMAL(10,3) 
    , IN priority INT(10) 
    , IN status INT(10) 
    , IN product_id INT(10) UNSIGNED 
    ) 
     
    BEGIN 
     
    INSERT INTO customer 
     
    (customer_id, 
    type, 
    costperclick, 
    priority, 
    status, 
    product_id) 
     
    VALUES 
     
        (p_customer_id, 
    p_type, 
    p_costperclick, 
    p_priority, 
    p_status, 
    p_product_id) 
     
      ON DUPLICATE KEY UPDATE c=c+1; 
     
    END

    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    Voilà, merci à vous pour votre aide !

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Et donc, c'est quoi le problème ?
    Vous ne voulez quand même pas qu'on fasse votre boulot à votre place ?

    On peut vous faire un devis, si vous voulez !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2015
    Messages : 13
    Par défaut
    Merci pour l'aide !

    Non je ne pige pas le c=c+1

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Non je ne pige pas le c=c+1
    Après avoir remis en forme votre message, j'ai regardé d'un peu plus prêt et je confirme : la demande n'est pas claire !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO `customer` (`customer_id`,`name`,`url`,`type`,`costperclick`,`priority`,`status`,`product_id`) VALUES (5036517,'camera-accushop.nl','http://www.camera-accushop.nl/',2,0.16,300,0,2344415) 
                        ON DUPLICATE KEY 
                        UPDATE `name`='camera-accushop.nl',`url`='http://www.camera-accushop.nl/',`type`=2,`costperclick`=0.16,`priority`=300,`status`=0,`product_id`=2344415,`customer_id`=5036517
    Soit j'insère l'ID 5036517, soit je le mets à jour avec la valeur 5036517, c'est à dire la même !
    Et les autres valeurs sont identiques également dans l'INSERT et dans l'UPDATE !

    Sans explication plus concrète de ce qu'il faut faire, on ne peut pas aider !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2015
    Messages : 13
    Par défaut
    ok merci d'avoir regardé, je vais me renseigner plus précisément.

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    Citation Envoyé par oracle13400 Voir le message
    non je pige pas le c=c+1
    C'est l'exemple de la doc :
    INSERT ... ON DUPLICATE KEY UPDATE Syntax

    Je pense qu'il faut quelque chose comme ça :

    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
    CREATE PROCEDURE sp_insert_customer  
     ( IN p_customer_id INT(10) UNSIGNED 
    , IN p_type INT(10) 
    , IN p_costperclick DECIMAL(10,3) 
    , IN p_priority INT(10) 
    , IN p_status INT(10) 
    , IN p_product_id INT(10) UNSIGNED 
    ) 
     
    BEGIN 
     
    INSERT INTO customer (customer_id, type, costperclick, priority, status, product_id) 
    VALUES (p_customer_id, p_type, p_costperclick, p_priority, p_status, p_product_id) 
        ON DUPLICATE KEY UPDATE 
        type = p_type, 
        costperclick = p_costperclick, 
        priority = p_priority, 
        status = p_status, 
        product_id = p_product_id; 
     
    END
    Enfin je pense qu'il faut revoir les colonnes, il manque l'url par rapport à leur exemple et il faut probablement mettre toutes les colonnes.
    Dans leur code remettre la PK dans la partie UPDATE est une erreur.

  7. #7
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Janvier 2015
    Messages : 13
    Par défaut
    https://dev.mysql.com/doc/refman/5.0...duplicate.html

    on essaye d’insérer dans la table et si nous avons une violation de primary key, on update l'enregistrement avec les nouvelles valeurs.
    Bien sûr, la clé est la même, c'est la raison pour laquelle nous obtenons la violation au début.

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Si on cherche à insérer un customer, c'est qu'il est nouveau, non ?
    Donc on ne connait pas encore son id, qui est en principe un entier auto-incrémenté, et il ne peut pas y avoir de DUPLICATE KEY !

    C'est vraiment bizarre comme demande !

    Et pourquoi vouloir une procédure SQL alors qu'une simple requête INSERT est suffisante ?

    Encore une fois, on n'en sait pas assez pour pouvoir aider efficacement.

    Et j'ai l'impression que ce qui est demandé est du bidouillage plutôt qu'un réel besoin conçu et pensé proprement.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Udpate error sur dataset en WPF Xaml C#
    Par praspail dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 15/04/2011, 09h58
  2. Curseur pour udpate
    Par bouzaidi dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 22/12/2009, 17h36
  3. requette udpate avec jointure
    Par comme de bien entendu dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 28/02/2008, 17h45
  4. Udpate + Sous Requete
    Par garfieldfido dans le forum Langage SQL
    Réponses: 1
    Dernier message: 13/12/2006, 16h37
  5. Problème udpate avec un type Date
    Par kevinp dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 17/05/2006, 06h09

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