Par exemple, cela ne fonctionne pas:Dans MySQL: Comment passer un nom de table en tant que procédure stockée et/ou argument de fonction?
DELIMITER //
CREATE PROCEDURE countRows(tbl_name VARCHAR(40))
BEGIN
SELECT COUNT(*) as ct FROM tbl_name;
END //
DELIMITER ;
CALL countRows('my_table_name');
Produit:
ERROR 1146 (42S02): Table 'test.tbl_name' doesn't exist
Cependant, cela fonctionne comme prévu:
SELECT COUNT(*) as ct FROM my_table_name;
Quelle syntaxe est nécessaire d'utiliser un argument comme nom de la table dans une instruction select? Est-ce seulement possible?
Même si cela était possible, ce n'est pas un chemin que vous devriez descendre. Soit construire le s'procs avec le sql que vous voulez vraiment, ou tout simplement aller de l'avant et intégrer le sql ad hoc dans votre code. – NotMe
@Chris Vous pouvez voir l'intention et la puissance ici, non? Passer un nom de table à une fonction générique. Je le vois comme parfaitement légitime et nécessaire. Aidez-moi à comprendre pourquoi il est mauvais de contrôler un ensemble de résultats d'un sproc? De ce que vous dites, si j'ai un développeur .NET et un développeur PHP, je devrais leur demander d'écrire leur propre code pour obtenir le même ensemble de résultats? –
Je vois l'intention, et c'est défectueux. Je vous suggère fortement de lire ce qui suit: http://www.sommarskog.se/dynamic_sql.html Bien qu'il couvre MS SQL Server, les leçons sont les mêmes. – NotMe