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 : 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
 
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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