Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/02/2007, 12h04   #1
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 103
Points : 27
Points : 27
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 :
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
hpavavar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2007, 21h50   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
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 SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/02/2007, 23h21   #3
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
ça ne sert à rien d'utiliser une proc stock et un curseur pour ça. Un DELETE multitables suffit :

Code :
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 SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2007, 11h52   #4
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 103
Points : 27
Points : 27
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 ?
hpavavar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2007, 15h29   #5
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
pourquoi ne pas tout simplement prévoir tes clés étrangères avec une suppression en cascade (ON DELETE CASCADE) ?
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2007, 15h45   #6
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 103
Points : 27
Points : 27
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.
hpavavar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2007, 23h11   #7
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
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 SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/02/2007, 13h34   #8
Nouveau Membre du Club
 
Inscription : février 2007
Messages : 103
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 103
Points : 27
Points : 27
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
hpavavar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h24.


 
 
 
 
Partenaires

Hébergement Web