MySQL dynamique avec des variables locales
-
16-09-2019 - |
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?
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 .