[MySQL5] Procédures Stockées de Mise à jour
Bonjour tout le monde,
dans le cadre d'un site perso, j'utilise la base de données MySQL 5.
Pour ajouter, modifier, supprimer mes tables de ma base de données, je passe par des Procédures Stockées.
J'aimerai vous demander votre avis pour les procédures stockées de mises à jour.
Par exemple :
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
|
DELIMITER $$
DROP PROCEDURE IF EXISTS `web75-shinn77`.`Proc_spU_ModifierArashiChanteur` $$
CREATE DEFINER=`web75-shinn77`@`%` PROCEDURE `Proc_spU_ModifierArashiChanteur`(
p_Nom varchar(50),
p_Prenom varchar(50),
p_Surnom varchar(80),
p_DateNai varchar(10),
p_VilleNai varchar(150),
p_PaysNai varchar(50),
p_Biographie text
)
BEGIN
UPDATE ArashiChanteur
SET
Nom = UPPER(TRIM(p_Nom)),
Prenom = Ucfirst(TRIM(p_Prenom)),
Surnom = Ucfirst(TRIM(p_Surnom)),
DateNai = STR_TO_DATE(p_DateNai, '%d/%m/%Y'),
VilleNai = Ucfirst(TRIM(p_VilleNai)),
PaysNai = UPPER(TRIM(p_PaysNai)),
Biographie = Ucfirst(TRIM(p_Biographie))
WHERE id = p_id;
END $$
DELIMITER ; |
Dans cette procédure stockée, je met donc à jour ma table ArashiChanteur avec les données reçues en paramètres.
Seulement, ce qui m'intéresserait c'est de ne mettre à jour QUE ce que je veux.
Par exemple je veux mettre à jour que la Ville de Naissance.
J'aimerai pouvoir faire cela :
Code:
1 2
|
CALL Proc_spU_ModifierArashiChanteur ('', '', '', '', 'Tokyo', '', ''); |
En exécutant la procédure stockée de la façon comme suit j'aimerai qu'il ne mette à jour QUE la ville car les autres paramètres, il a reçut des champs vide.
Je pourrais faire cela via de multiple IF THEN ELSE IF END IF...
Mais cela pourrait être long, fastidieux et moche.
Y'a-t'il une façon plus propre de construire ma requête dynamiquement afin qu'il ne mette à jour QUE les champs renseigner dans les paramètres (où la valeur est différent de vide) ?
EDIT : Sur SQL Server j'utilisais les requêtes dynamiques (construire une chaine qui contient ma requete et que je construis selon des conditions, puis une fois terminée, lancer ma requete). Y'a un équivalent en MySQL ??
Merci de me donner votre avis sur la question.
Shinn77, Till the End of Time