Bonjour à tous,
voilà je vous explique mon problème.
J'ai crée une procédure stockée dans le but de faire du SQL dynamique et plus précisemment des Insert "dynamiques". Elle se présente de la manière suivante :
Procédure stockée
Elle fonctionne très bien mais uniquement lorsque je lui passe un seul élément dans les paramètres. Je m'explique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 DROP PROCEDURE IF EXISTS `sqlDynInsert`; DELIMITER $$ CREATE DEFINER=`root`@`localhost` PROCEDURE `sqlDynInsert`(IN asTable VARCHAR(50), IN asColonne VARCHAR(50), IN asValeur VARCHAR(100)) BEGIN DECLARE cmd VARCHAR(255); SET @lsSql = CONCAT('INSERT INTO ',asTable,'(',asColonne,') VALUES ("',asValeur,'")'); PREPARE cmd FROM @lsSql; EXECUTE cmd; DEALLOCATE PREPARE cmd; END $$
Cas de figure qui fonctionne :
Cas de figure qui ne fonctionne pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part CALL sqlDynInsert('dossiers', 'prenom', 'nicolas')
Le problème vient apparemment des valeurs passées. J'ai essayé dans tous les sens, avec des "\", des simples / doubles quotes.... Mais je ne m'en sors pas. Il semble m'interprêter mes deux éléments comme un seul et unique élément qui contiendrait des quotes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part CALL sqlDynInsert('dossiers', 'titre,prenom', "'M','Nicolas'")
J'ai un retour m'indiquant "Column count doesn't match value count"
Selon vous, comment puis je faire pour pouvoir passer autant d'éléments que je le souhaite dans ce cas de figure.
Par avance grand merci de votre aide.
Partager