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 :

Trigger - probleme avec les variables [MariaDB]


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    Par défaut Trigger - probleme avec les variables
    Bonjour à tous,

    J'ai un soucis avec les variables "_chep_compteur_palette" et "_chep_compteur_coiffe", j'ai l'impression qu'elles ne se chargent pas avec la donnée retournée par la requête.

    2 tables :
    `chepbox`
    `chep_stock_bac_vide`

    Mon objectif est de supprimer les données de la table `chep_stock_bac_vide` lorsque je supprime ces même données de la table `chepbox` avec des conditions.

    Voici le code :
    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
    38
    39
     
    CREATE TRIGGER `before_delete_chepbox` BEFORE DELETE ON `chepbox`  FOR EACH ROW BEGIN
     
    DECLARE _chep_compteur_palette INT DEFAULT 0;
    DECLARE _chep_compteur_coiffe INT DEFAULT 0;
     
    SET _chep_compteur_palette = "SELECT COUNT(`chep_ref_palette`) FROM `chepbox` WHERE OLD.`chep_ref_palette` AND OLD.`chep_cofor`";
    SET _chep_compteur_coiffe = "SELECT COUNT(`chep_ref_coiffe`) FROM `chepbox` WHERE OLD.`chep_ref_coiffe` AND OLD.`chep_cofor`";
     
     
    			IF (_chep_compteur_palette = 1) AND (_chep_compteur_coiffe = 1) THEN 	
    				BEGIN
    					IF OLD.`chep_ref_bac` = 0 THEN
     
    							DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_palette` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`;
    							DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_coiffe` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`;
     
    					ELSE	
     
    							DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_bac` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`;
    							DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_palette` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`;
    							DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_coiffe` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`;
     
    					END IF;
    				END;	
     
    			ELSE			
     
    				IF OLD.`chep_ref_bac` <> 0 THEN 
    					BEGIN
    						DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_bac` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`;
    					END;
    				END IF;
     
    			END IF;	
     
     
     
    END

    Pour information, le dernier bloc fonctionne très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ELSE			
     
    				IF OLD.`chep_ref_bac` <> 0 THEN 
    					BEGIN
    						DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_bac` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`;
    					END;
    				END IF;
     
    			END IF;
    C'est le premier bloc qui me pose des difficultés, j'ai l'impression que les variables "_chep_compteur_palette" et "_chep_compteur_coiffe" ne s’alimente pas du résultat de la requête.

    J'ai remplacer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SET _chep_compteur_palette = "SELECT COUNT(`chep_ref_palette`) FROM `chepbox` WHERE OLD.`chep_ref_palette` AND OLD.`chep_cofor`";
    SET _chep_compteur_coiffe = "SELECT COUNT(`chep_ref_coiffe`) FROM `chepbox` WHERE OLD.`chep_ref_coiffe` AND OLD.`chep_cofor`";
    par cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT COUNT(`chep_ref_palette`) INTO _chep_compteur_palette FROM `chepbox` WHERE OLD.`chep_ref_palette` AND OLD.`chep_cofor`;
    SELECT COUNT(`chep_ref_coiffe`) INTO _chep_compteur_coiffe FROM `chepbox` WHERE OLD.`chep_ref_coiffe` AND OLD.`chep_cofor`;
    Pas mieux au niveau du résultat.

    Dans PhpMyAdmin, les requêtes correspondantes aux données restante dans la table `chepbox` retournent le bon résultat soit "palette =1" et "coiffe =1" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT COUNT(`chep_ref_palette`) AS palette FROM `chepbox` WHERE `chep_ref_palette`="C60" AND `chep_cofor`="A00ER";
    SELECT COUNT(`chep_ref_coiffe`) AS coiffe FROM `chepbox` WHERE `chep_ref_palette`="C61" AND OLD.`chep_cofor`="A00ER";
    Mais lors de la suppression des données de la table `chepbox`, les données correspondantes restent dans la table `chep_stock_bac_vide`.

    Qu'est ce qui ne va pas ?

    Merci d'avance pour votre aide précieuse.


    PS : en injectant la valeur directement dans la varaiable, cela fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SET @_chep_compteur_palette := 1;
    SET @_chep_compteur_coiffe := 1;

    La question c'est pourquoi ces 2 lignes ci-dessous ne renvoi pas 1 alors qu'en ligne de cde cela fonctionne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    "SELECT COUNT(`chep_ref_palette`) FROM `chepbox` WHERE OLD.`chep_ref_palette` AND OLD.`chep_cofor`"
     
    "SELECT COUNT(`chep_ref_coiffe`) FROM `chepbox` WHERE OLD.`chep_ref_coiffe` AND OLD.`chep_cofor`";
    SOLUTION :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SET @_chep_compteur_palette := (SELECT COUNT(`chep_ref_palette`) FROM `chepbox` WHERE `chep_ref_palette` = OLD.`chep_ref_palette` AND `chep_cofor` = OLD.`chep_cofor`);
    SET @_chep_compteur_coiffe := (SELECT COUNT(`chep_ref_coiffe`) FROM `chepbox` WHERE `chep_ref_coiffe` = OLD.`chep_ref_coiffe` AND `chep_cofor` = OLD.`chep_cofor`);

  2. #2
    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 877
    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 877
    Par défaut
    Salut SwatSwat.

    On ne met pas un select entre guillemet, mais entre parenthèses.
    De même, une chaîne de caractères se met entre apostrophe et non entre guillemet.

    Citation Envoyé par SwatSwat
    Qu'est ce qui ne va pas ?
    Ce sont vos deux requêtes qui ne peuvent pas fonctionner normalement.
    Vous faites un where sur vos colonnes mais vous n'indiquez pas sur les valeurs à tester.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SET _palette = (SELECT COUNT(`chep_ref_palette`) FROM `chepbox` WHERE OLD.`chep_ref_palette` AND OLD.`chep_cofor`);
    SET _coiffe  = (SELECT COUNT(`chep_ref_coiffe`)  FROM `chepbox` WHERE OLD.`chep_ref_coiffe`  AND OLD.`chep_cofor`);
    Voici ce que vous devez mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SET _palette = (SELECT COUNT(`chep_ref_palette`) FROM `chepbox` WHERE OLD.`chep_ref_palette` = 'C60' AND OLD.`chep_cofor` = ='A00ER');
    SET _coiffe  = (SELECT COUNT(`chep_ref_coiffe`)  FROM `chepbox` WHERE OLD.`chep_ref_coiffe`  = 'C61' AND OLD.`chep_cofor` = ='A00ER');
    Citation Envoyé par SwatSwat
    La question c'est pourquoi ces 2 lignes ci-dessous ne renvoi pas 1 alors qu'en ligne de cde cela fonctionne ?
    Parce que vos deux lignes ne sont pas identiques à ce que vous tapez dans phpmyadmin.

    On peut simplifier votre déclencheur :
    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
    CREATE TRIGGER `before_delete_chepbox`
    BEFORE DELETE ON `chepbox`
    FOR EACH ROW
    BEGIN
      DECLARE _palette INTEGER DEFAULT 0;
      DECLARE _coiffe  INTEGER DEFAULT 0;
     
      SET _palette = (SELECT COUNT(`chep_ref_palette`) FROM `chepbox` WHERE OLD.`chep_ref_palette` = 'C60' AND OLD.`chep_cofor` ='A00ER');
      SET _coiffe  = (SELECT COUNT(`chep_ref_coiffe`)  FROM `chepbox` WHERE OLD.`chep_ref_coiffe`  = 'C61' AND OLD.`chep_cofor` ='A00ER');
     
      IF (OLD.`chep_ref_bac` <> 0) THEN
         DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_bac`     AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`;
      END IF;
     
      IF (_palette = 1) AND (_coiffe = 1) THEN
         DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_palette` AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`;
         DELETE FROM `chep_stock_bac_vide` WHERE `chep_reference_stock_bac_vide` = OLD.`chep_ref_coiffe`  AND `chep_cofor_stock_bac_vide` = OLD.`chep_cofor`;
      END IF;
    END
    Sinon, je ne comprends pas trop ce que vous essayez de faire.
    Vous cherchez à comptabiliser le nombre de lignes pour les palettes et les coiffes sur un critère bien particulier.
    Mais ensuite, vous supprimez des lignes qui n'ont pas nécessairement les mêmes critères.

    @+

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

Discussions similaires

  1. Probleme avec les variables d'environnement
    Par top_eagle dans le forum Windows XP
    Réponses: 1
    Dernier message: 26/01/2009, 15h13
  2. Probleme avec les variables d'environnement
    Par top_eagle dans le forum Administration système
    Réponses: 3
    Dernier message: 26/01/2009, 15h10
  3. [PHP-JS] probleme avec les variable dans javascript
    Par aminobobo dans le forum Langage
    Réponses: 3
    Dernier message: 22/07/2008, 12h02
  4. Probleme avec les variables du Settings
    Par Lafab dans le forum C#
    Réponses: 4
    Dernier message: 29/06/2007, 14h16
  5. Probleme avec les variables de session en ASP
    Par alhc2666 dans le forum ASP
    Réponses: 1
    Dernier message: 07/03/2006, 16h19

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