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 :

Problème de comparaison dans une proc


Sujet :

SQL Procédural MySQL

  1. #1
    Membre du Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Points : 64
    Points
    64
    Par défaut Problème de comparaison dans une proc
    Bonjour à tous et à toutes.

    Je débute en procédures stockées.
    J'ai suivi quelques articles présents sur ce site. (Merci aux auteurs).

    Bon, pour en venir à mon problème:

    J'ai une table (semaine) qui contient 7 clés étrangères (lundi, mardi...) vers la même table (jour).

    Parfois certains champs sont NULL (aucun jour associé).

    Je veux écrire une procédure à qui on passe un id de semaine et qui efface tous les jours associés.

    Elle se présente comme suit :
    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
     
    DELIMITER //
     
    DROP PROCEDURE IF EXISTS DEL_Semaine//
    CREATE PROCEDURE DEL_Semaine (RP_idSemaine int)
    BEGIN
     
    	DECLARE RP_lundi,RP_mardi,RP_mercredi INT default NULL;
    	DECLARE intrvbl INT default 0;
    	DECLARE cur_sem CURSOR FOR SELECT lundi,mardi,mercredi FROM semaine WHERE idSemaine = RP_idSemaine;
    	DECLARE CONTINUE handler FOR NOT FOUND SET intrvbl = 1;
     
    	OPEN cur_sem;
     
    	FETCH cur_sem into RP_lundi, RP_mardi, RP_mercredi;
     
    	IF intrvbl = 0 THEN
     
     
    		IF RP_lundi <> NULL THEN
       		DELETE FROM jour WHERE idjour = RP_lundi;
    		END IF;
    		if RP_mardi <> NULL THEN
       		DELETE FROM jour WHERE idjour = RP_mardi;
    		END IF;
    		if RP_mercredi <> NULL THEN
       		DELETE FROM jour WHERE idjour = RP_mercredi;
    		END IF;
     
    	END IF;
     
    	CLOSE cur_sem;
     
    END//
     
    DELIMITER ;
    Le problème c'est que j'entre jamais dans les if du style RP_lundi <> NULL ! Même si le RP_lundi a bien une valeur (un select rp_lundi avant le if me renvoi bien un champ. Donc ça passe pas le if.

    C'est sûrement très bête mais je suis coincé là.

    Merci de m'aider.

    --
    Hpar

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 743
    Points
    11 743
    Par défaut
    Citation Envoyé par hpavavar
    Le problème c'est que j'entre jamais dans les if du style RP_lundi <> NULL !
    NULL n'est jamais égal, ni différent. Il faut utiliser IS qui est fait pour ça :
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 743
    Points
    11 743
    Par défaut
    ça ne sert à rien d'utiliser une proc stock et un curseur pour ça. Un DELETE multitables suffit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    -- (à tester sur une copie)
    
    DELETE j
    FROM jour j 
      INNER JOIN semaine s ON j.idjour IN (s.RP_lundi, s.RP_mardi, s.RP_mercredi)
    WHERE idSemaine = RP_idSemaine
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  4. #4
    Membre du Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Points : 64
    Points
    64
    Par défaut
    Bonjour.

    Merci pour ces réponses.
    C'est bien ce que je pensais: un truc tout bête, mais des fois ça coince

    En fait mon soucis, chaque jour est clé étrangère des semaines mais aussi d'une autre table : les plages.
    Cette table me permet de définir des plages horaires sur un jour.

    Donc lorsque je supprime une plage, pas de soucis.
    Mais lorsque je supprime une semaine, il me faut supprimer les jours associés, mais aussi les plages associés à ces jours.

    Et ma table semaine est clé étrangère d'une autre table, donc lors de suppressions je pensais employer une procedure qui appelle éventuellement la procédure ci-dessus.

    Est-ce possible avec un DELETE multitables ?

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 743
    Points
    11 743
    Par défaut
    pourquoi ne pas tout simplement prévoir tes clés étrangères avec une suppression en cascade (ON DELETE CASCADE) ?
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  6. #6
    Membre du Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Points : 64
    Points
    64
    Par défaut
    J'y ai pensé.
    Cela ne risque-t-il pas de poser problème ?

    Si je supprime ma semaine, cela ne va pas me supprimer mes jours vu que je supprime une table fille.

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 743
    Points
    11 743
    Par défaut
    Citation Envoyé par hpavavar
    Si je supprime ma semaine, cela ne va pas me supprimer mes jours vu que je supprime une table fille.
    Si tu supprimes une semaine et qu'il y a des clés étrangères en ON DELETE CASCADE, cela va également supprimer chacun des jours de ta semaine... c'est bien ça le but ?
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  8. #8
    Membre du Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Février 2007
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : Février 2007
    Messages : 103
    Points : 64
    Points
    64
    Par défaut
    Le but est que si je supprime une semaine, il faut que ça me supprime les jours et les plages associées aux jours.

    Il ne me reste plus qu'une semaine avant de rendre mon projet. J'ai la solution de la procédure stockée qui marche je vais m'en contenter tant que j'ai pas fini le reste.


    Merci pour ton aide

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/12/2011, 21h18
  2. Appels de procedures stockées dans une proc stockée ?
    Par Nadaa dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 17/07/2008, 10h32
  3. Problème dans une proc import
    Par CélineM dans le forum SAS Base
    Réponses: 3
    Dernier message: 19/05/2008, 16h24
  4. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19
  5. problème de guillemets dans une formule shell
    Par dim_italia dans le forum VBA Access
    Réponses: 7
    Dernier message: 18/08/2003, 12h46

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