Maison >base de données >tutoriel mysql >Comment renvoyer une table virtuelle à partir d'une fonction Postgres ?

Comment renvoyer une table virtuelle à partir d'une fonction Postgres ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-27 10:28:10725parcourir

How to Return a Virtual Table from a Postgres Function?

Renvoi d'une table virtuelle à partir d'une fonction dans Postgres

Dans Postgres, la création d'une table virtuelle personnalisée avec plusieurs lignes et colonnes à l'aide d'une fonction nécessite un syntaxe. Cet article montre comment écrire correctement une fonction qui renvoie un ensemble d'enregistrements ressemblant à une table virtuelle.

Syntaxe correcte

Pour définir une fonction qui renvoie une table virtuelle avec trois colonnes entières, utilisez le PL/pgSQL suivant code :

CREATE OR REPLACE FUNCTION f_foo()
  RETURNS TABLE (a int, b int, c int) AS
$func$
BEGIN
RETURN QUERY VALUES
  (1,2,3)
, (3,4,5)
, (3,4,5)
;
END
$func$  LANGUAGE plpgsql IMMUTABLE ROWS 3;

Explication

  • TABLE DES RETOURS : Indique que la fonction renverra un type de ligne ad hoc.
  • RENVOYER LES VALEURS DE REQUÊTE : Utilisé pour renvoyer plusieurs lignes à l'aide de l'expression VALUES.
  • ROWS 3 : Déclare le nombre de lignes renvoyées, aidant ainsi le planificateur de requêtes à optimiser l'exécution.
  • IMMUTABLE : Spécifie que le résultat ne change jamais, permettant ainsi la performance optimisation.

Options alternatives

SQL simple : Pour des scénarios simples, une simple instruction SQL peut suffire :

VALUES (1,2,3), (3,4,5), (3,4,5)

Fonction SQL : Vous pouvez également envelopper l'instruction ci-dessus dans un SQL fonction :

CREATE OR REPLACE FUNCTION f_foo()
   RETURNS TABLE (a int, b int, c int) AS
$func$
   VALUES (1, 2, 3)
        , (3, 4, 5)
        , (3, 4, 5);
$func$  LANGUAGE sql IMMUTABLE ROWS 3;

Utilisation

Pour récupérer la table virtuelle :

SELECT * FROM f_foo();

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