Maison >base de données >tutoriel mysql >Comment créer une fonction Postgres renvoyant une table virtuelle avec plusieurs lignes ?

Comment créer une fonction Postgres renvoyant une table virtuelle avec plusieurs lignes ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-23 02:15:13283parcourir

How to Create a Postgres Function Returning a Virtual Table with Multiple Rows?

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

Problème

Vous recherchez une fonction Postgres qui renvoie une table virtuelle avec un contenu personnalisé, bénéficiant d'un inconnu nombre de lignes et trois colonnes. Vous rencontrez des difficultés pour localiser la syntaxe appropriée et avez besoin d'aide pour créer la fonction.

Solution

Utilisez la syntaxe suivante pour construire la fonction souhaitée :

CREATE OR REPLACE FUNCTION f_foo() -- (open_id numeric) -- parameter not used
  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

Clé Points :

  • TABLE DES RETOURS : Définit le type de retour comme un type de ligne ad hoc.
  • REQUÊTE DE RETOUR : Renvoie plusieurs lignes en une seule commande.
  • VALEURS : Saisit plusieurs lignes manuellement à l'aide d'une expression SQL standard.
  • PARAMETRES : Un paramètre inutilisé (open_id numérique) est inclus comme un exemple, mais il est facultatif.
  • IDENTIFIANTS : Citations doubles n'est pas nécessaire pour les identifiants légaux.
  • VOLATILITY: IMMUTABLE indique que le résultat est constant.
  • ROWS: Déclarer le nombre de lignes renvoyées ( LIGNES 3) peuvent faciliter la requête planificateur.

Alternatives :

  • SQL simple : Pour les cas simples, l'instruction SQL suivante suffit :
VALUES (1,2,3), (3,4,5), (3,4,5)
  • Fonction SQL : Encapsuler la déclaration dans une fonction SQL :
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;

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