En SQL, le SQL dynamique n'est pas pris en charge sauf dans la variante PL/PgSQL, qui peut créer des requêtes dynamiques. Pour utiliser le résultat d'une requête comme nom de table dans une autre requête, vous pouvez utiliser l'instruction PL/PgSQL EXECUTE.
Voici un exemple :
DO $$ BEGIN EXECUTE format('CREATE TABLE %I AS SELECT * FROM backup', 'backup_' || to_char(CURRENT_DATE,'yyyy-mm-dd')); END; $$ LANGUAGE plpgsql;
Le spécificateur de format %I dans la fonction de format cite correctement les identifiants, y compris les noms de table, éliminant ainsi le besoin de citations explicites avec quote_ident.
Pour éviter les vulnérabilités d'injection SQL, envisagez d'utiliser l'instruction EXECUTE ... USING pour les littéraux au lieu de format(...) avec %L. Pour les identifiants comme les noms de tables/colonnes, la concision du modèle %I reste une alternative utile à quote_ident.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!