Partie II
Programmation procédurale
282
© Éditions Eyrolles
Afin de pallier cette limitation, il faut construire l’instruction dynamique à l’aide de la fonction CONCAT en incluant éventuellement des placeholders aux endroits permis.
Exemple sans placeholder
La procédure cataloguée suivante crée dynamiquement, dans la base bdsoutou, une table de
nom passé en premier paramètre. Le nom de la seconde colonne de la table (ici de type INT)
est passé en second paramètre de la procédure.
L’appel suivant de cette procédure aura pour effet de créer la table Helico. La commande
DESCRIBE confirme la structure de la nouvelle table.
CALL bdsoutou.sousProg('Helico','turbine')$
Query OK, 0 rows affected (0.21 sec)
DESCRIBE bdsoutou.Helico $
Tableau 7-34 Utilisation des placeholders
Possibles
Impossibles
SELECT * FROM table WHERE col = ? ...
SELECT ? FROM table WHERE ...
SELECT * FROM ? WHERE ...
SELECT * FROM table WHERE ? > 1000
INSERT INTO table VALUES (?,?,?,?)
INSERT INTO ? VALUES(''F-FRTY'',?,?,?)
UPDATE table SET col=? WHERE col =?... UPDATE table SET ?=? WHERE col =? ...
UPDATE ? SET ...
DELETE FROM table WHERE col =?...
DELETE FROM table WHERE ? =...
DELETE FROM ? ...
Tableau 7-35 Création dynamique d’une table
Code MySQL
Commentaires
CREATE PROCEDURE bdsoutou.sousProg
(IN v_param1 VARCHAR(10),
IN v_param2 VARCHAR(10))
BEGIN
SET @vs_chaine := CONCAT
(
;
PREPARE etat FROM @vs_chaine;
EXECUTE etat;
DEALLOCATE PREPARE etat;
END;
Construction de la chaîne :
‘CREATE TABLE IF NOT EXISTS
bdsoutou.
(immat
CHAR(4),
INT)’
Création de la table.
Web
'CREATE TABLE IF NOT EXISTS
bdsoutou.',v_param1,' (immat CHAR(4), '
,v_param2,' INT)')
v_param1
v_param2
Précédent

- 304/418

Suivant