Question

Comment puis-je utiliser des instructions SQL dynamiques dans la base de données MySQL et sans utiliser des variables de session?

En ce moment j'ai un tel code (dans MySQL procédure stockée):

(...)
DECLARE TableName VARCHAR(32);
SET @SelectedId = NULL;
SET @s := CONCAT("SELECT Id INTO @SelectedId FROM ", TableName, " WHERE param=val LIMIT 1");
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
IF ISNULL(@SelectedId) THEN 
(...)

Mais je voudrais utiliser uniquement des variables locales, cela signifie que je voudrais commencer cette procédure avec:

DECLARE TableName VARCHAR(32);
DECLARE s VARCHAR(1024);
DECLARE SelectedId INTEGER UNSIGNED;
(...)

et ne pas utiliser @ carboniser partout. Est-il possible de le faire?

Était-ce utile?

La solution

Désolé, les déclarations préparées dans MySQL sont la session globale. Selon http: //dev.mysql. com / doc / refman / 5.1 / fr / sql-syntax-préparé-statements.html , "Une instruction préparée est aussi mondiale à la session."

Et il n'y a pas d'autre moyen (en plus des instructions préparées) pour exécuter SQL dynamique dans MySQL 5.x.

Vous pouvez bien sûr remplacer « @s » ci-dessus, mais vous êtes coincé avec AFAIK @SelectedId.

Dans 6.x MySQL, il y a une fonction prévue qui ajoutera une déclaration « EXECUTE IMMEDIATE » qui exécutera SQL dynamique. Voir http://forge.mysql.com/worklog/task.php?id = 2793 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top