Maison >base de données >tutoriel mysql >Comment utiliser des valeurs dynamiques comme noms de table dans PostgreSQL ?

Comment utiliser des valeurs dynamiques comme noms de table dans PostgreSQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-27 06:02:14445parcourir

How to Use Dynamic Values as Table Names in PostgreSQL?

Utilisation de valeurs dynamiques comme noms de table dans PostgreSQL

Lors des opérations de base de données, il est souvent nécessaire d'utiliser des valeurs dynamiques comme noms de table. Ceci peut être réalisé grâce au SQL dynamique, où le nom de la table est déterminé lors de l'exécution de la requête.

Dans PostgreSQL, le SQL dynamique peut être implémenté à l'aide de l'instruction PL/PgSQL EXECUTE dans un bloc DO ou une fonction PL/PgSQL. Le SQL ordinaire ne prend pas en charge le SQL dynamique.

Par exemple, considérons l'objectif suivant : utiliser le résultat d'une requête pour déterminer dynamiquement le nom de la table pour une requête ultérieure.

Requête vers Obtenez le nom de la table :

SELECT 'backup_' || TO_CHAR(CURRENT_DATE,'yyyy-mm-dd')

Suivant souhaité Requête :

CREATE TABLE (SELECT 'backup_' || TO_CHAR(CURRENT_DATE,'yyyy-mm-dd')) AS * SELECT FROM backup

Solution utilisant PL/PgSQL EXECUTE :

DO
$$
BEGIN
EXECUTE format('CREATE TABLE %I AS SELECT * FROM backup', 'backup_' || to_char(CURRENT_DATE,'yyyy-mm-dd'));
END;
$$
LANGUAGE plpgsql;

Explication :

La fonction format(...) est utilisée pour construire l'instruction SQL dynamique. Le spécificateur de format %I garantit une citation correcte du nom de la table/colonne.

Remarque :

Pour les valeurs littérales, il est recommandé d'utiliser EXECUTE ... USING au lieu de formater (...) avec %L. Cependant, pour les identifiants tels que les noms de table, le format %I est une alternative pratique à l'utilisation de 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn