Maison > base de données > tutoriel mysql > Comment renvoyer les résultats d'une requête à partir d'une fonction PostgreSQL ?

Comment renvoyer les résultats d'une requête à partir d'une fonction PostgreSQL ?

Patricia Arquette
Libérer: 2025-01-17 10:16:21
original
763 Les gens l'ont consulté

How to Return Query Results from a PostgreSQL Function?

Renvoyer les résultats de la requête dans la fonction PostgreSQL

PostgreSQL utilise l'instruction RETURN QUERY pour renvoyer les résultats d'une requête à partir d'une fonction. Cette méthode est particulièrement utile lorsque vous avez besoin des résultats de la requête dans le cadre de la sortie de la fonction.

Exemple

Considérez la fonction suivante :

<code class="language-sql">CREATE OR REPLACE FUNCTION wordFrequency(maxTokens INTEGER)
  RETURNS SETOF RECORD AS
$$
BEGIN
  -- 执行查询
  SELECT text, count(*), 100 / maxTokens * count(*)
  FROM (
    SELECT text
    FROM token
    WHERE chartype = 'ALPHABETIC'
    LIMIT maxTokens
  ) AS tokens
  GROUP BY text
  ORDER BY count DESC;
END
$$
LANGUAGE plpgsql;</code>
Copier après la connexion

Cette fonction tente de renvoyer les résultats de la requête, mais il manque une partie cruciale : l'instruction RETURN QUERY.

Solution

Pour renvoyer les résultats de la requête, utilisez l'instruction RETURN QUERY comme suit :

<code class="language-sql">CREATE OR REPLACE FUNCTION word_frequency(_max_tokens int)
  RETURNS TABLE (txt   text    -- 函数体中显示为 OUT 参数
               , cnt   bigint
               , ratio bigint)
  LANGUAGE plpgsql AS
$func$
BEGIN
   RETURN QUERY
   SELECT t.txt
        , count(*) AS cnt                 -- 列别名仅在此查询中可见
        , (count(*) * 100) / _max_tokens  -- 添加了括号
   FROM  (
      SELECT t.txt
      FROM   token t
      WHERE  t.chartype = 'ALPHABETIC'
      LIMIT  _max_tokens
      ) t
   GROUP  BY t.txt
   ORDER  BY cnt DESC;
END
$func$;</code>
Copier après la connexion

Exécuter

Pour exécuter cette fonction, vous pouvez utiliser l'instruction suivante :

<code class="language-sql">SELECT * FROM word_frequency(123);</code>
Copier après la connexion

Cela renverra un tableau contenant token le texte, le nombre et le rapport pour chaque mot du tableau.

Remarques

  • Utiliser les paramètres OUT : Les paramètres OUT définis dans l'en-tête de la fonction doivent correspondre exactement aux colonnes renvoyées par la requête.
  • Nommez soigneusement les paramètres OUT : Utilisez des noms sans ambiguïté pour éviter d'éventuels conflits de noms. Évitez d'utiliser des mots réservés ou des types de données primitifs.
  • Utilisez des parenthèses pour la division d'entiers : Lors de la division d'entiers, placez l'opération de division entre parenthèses pour minimiser les erreurs d'arrondi.
  • Considérez les types de données numériques : Pour les opérations impliquant des nombres à virgule flottante ou des pourcentages, l'utilisation de types de données numériques offre une plus grande précision.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal