Dans MySQL: Comment passer un tableau nom de la procédure stockée et/ou une fonction en argument?

Par exemple, cela ne fonctionne pas:

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;

Ce que la syntaxe est nécessaire d'utiliser un argument comme un nom de table dans une instruction select? Est-ce même possible?

  • Même si c'était possible, ce n'est pas un chemin, vous devez aller vers le bas. Soit pour construire les s'procs avec le sql que vous voulez vraiment, ou simplement aller de l'avant et incorporer le sql ad hoc dans votre code.
  • Vous pouvez voir l'intention et le pouvoir ici, non? Le passage d'un nom de tableau à une fonction générique. Je vois cela comme parfaitement légitime et nécessaire. M'aider à comprendre pourquoi c'est mauvais pour le contrôle d'un ensemble de résultats à partir d'une procédure stockée? À partir de ce que vous dites, si j'ai un .NET développeur et d'un développeur PHP, je devrais leur demander d'écrire leur propre code pour obtenir les mêmes résultats?
  • Je vois le but, et il est imparfait. Je vous suggère fortement de lire le code suivant: sommarskog.se/dynamic_sql.html Bien qu'il couvre ms sql server, les enseignements sont les mêmes.
  • Et voici un autre lien instructif: sqlskills.com/BLOGS/KIMBERLY/post/...
InformationsquelleAutor randomx | 2010-06-04