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

 MySQL Discussion :

UPDATE dans une procédure stockée


Sujet :

MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 5
    Par défaut UPDATE dans une procédure stockée
    Bonjour à tous

    ca fait des années que je lis le forum et ca m'a beaucoup aider.

    en ce moment j'essaie les procédure stockées avec mysql, je souhaite faire

    SELECT if (@qte < (SELECT qte FROM liste WHERE id = @id),(SELECT code_prod FROM lit_liste LIMIT 1),"NO");==> RAS
    SELECT if (@qte < (SELECT qte FROM liste WHERE id = @id),(UPDATE liste SET code_prod ='999' WHERE id=1,"");==> Ne marche pas, erreur sql 1064 sql syntax

    UPDATE liste SET code_prod ='999' WHERE id=1 ==> requête fonctionne

    quelqu'un peut-il m'aider à comprendre d'où vient le problème

    Merci encore à tous

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 317
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 317
    Billets dans le blog
    17
    Par défaut
    Dans ta procédure stockée, il faut utiliser la structure IF et pas la fonction IF() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IF @qte < (SELECT ...) THEN
        UPDATE liste SET code_prod = '999' WHERE id = 1;
    END IF;
    https://dev.mysql.com/doc/refman/8.0/en/if.html

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 599
    Billets dans le blog
    10
    Par défaut
    Faire un SELECT avant l'UPDATE est contre-performant

    Tout simplement

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE liste 
    SET code_prod ='999' 
    WHERE id=@ID
      AND qte > @QTE

  4. #4
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 846
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 846
    Par défaut
    Salut à tous.

    @ Escartefigue : espoir06 apprend les procédures stockés.

    @ tous : voici l'exemple d'une procédure stockée :
    Code mysql : 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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `liste`
    --------------
     
    --------------
    CREATE TABLE `liste`
    ( `id`   integer unsigned NOT NULL auto_increment primary key,
      `qte`  integer unsigned NOT NULL,
      `res`  char(01)         NOT NULL DEFAULT ' '
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    DROP PROCEDURE IF EXISTS verify
    --------------
     
    --------------
    CREATE PROCEDURE verify (IN In_Id  INTEGER,
                                                     IN In_Qte INTEGER)
    DETERMINISTIC
    MODIFIES SQL DATA
    BEGIN
            DECLARE _msg VARCHAR(255);
            DECLARE _id  INTEGER;
            DECLARE _qte INTEGER;
     
            select id, qte into _id, _qte from liste where id=In_Id;
     
            if (In_Qte <= _qte) then
                    set _msg = concat('Id: ',cast(_id as char), ' Qte: ', cast(_qte as char), ' >= ', cast(In_Qte as char));
                    SIGNAL SQLSTATE VALUE '07777' SET MESSAGE_TEXT = _msg, MYSQL_ERRNO = 7777;
            end if;
     
            UPDATE liste SET res = '*' where id=In_Id;
    END
    --------------
     
    --------------
    INSERT INTO `liste` (`qte`) values (25),(75)
    --------------
     
    --------------
    select * from `liste`
    --------------
     
    +----+-----+-----+
    | id | qte | res |
    +----+-----+-----+
    |  1 |  25 |     |
    |  2 |  75 |     |
    +----+-----+-----+
    --------------
    call `verify`(1, 50)
    --------------
     
    --------------
    call `verify`(2, 25)
    --------------
     
    ERROR 7777 (07777) at line 75: Id: 2 Qte: 75 >= 25
    --------------
    select * from `liste`
    --------------
     
    +----+-----+-----+
    | id | qte | res |
    +----+-----+-----+
    |  1 |  25 | *   |
    |  2 |  75 |     |
    +----+-----+-----+
    --------------
    COMMIT
    --------------
     
    Appuyez sur une touche pour continuer...

    Cordialement.
    Artemus24.
    @+

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 5
    Par défaut
    Merci beaucoup
    grâce à votre aide ca marche nickel
    a bientôt

Discussions similaires

  1. [2016] Problème update dans une procédure stockée
    Par animalx123 dans le forum Développement
    Réponses: 5
    Dernier message: 01/03/2017, 09h55
  2. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  3. Réponses: 3
    Dernier message: 24/04/2008, 21h56
  4. Marquer une pause dans une procédure stockée
    Par PéPénet dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/11/2003, 10h42
  5. Transformation de date dans une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/10/2003, 11h31

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