Renvoyer les résultats de la requête SELECT dans la fonction PostgreSQL
Dans PostgreSQL, utiliser des fonctions pour renvoyer les résultats d'une requête SELECT nécessite de comprendre la syntaxe et le type de retour appropriés. Nous examinerons l'une des fonctions fournies et vous guiderons sur la façon de récupérer correctement les résultats de la requête.
La fonction en question wordFrequency
n'a actuellement pas d'instruction return correcte. Pour résoudre ce problème, nous utiliserons la syntaxe RETURN QUERY
.
Fonction corrigée :
<code class="language-sql">CREATE OR REPLACE FUNCTION wordFrequency(_max_tokens integer) RETURNS SETOF RECORD AS $$ BEGIN RETURN QUERY SELECT text, count(*), 100.0 / _max_tokens * count(*) AS ratio FROM ( SELECT text FROM token WHERE chartype = 'ALPHABETIC' LIMIT _max_tokens ) AS tokens GROUP BY text ORDER BY count DESC; END; $$ LANGUAGE plpgsql;</code>
Points clés :
RETURN QUERY
permet de renvoyer directement les résultats d'une requête SELECT. SETOF RECORD
indique que la fonction renverra un ensemble d'enregistrements. text
et count(*)
) doivent correspondre aux noms de colonnes de la requête. Nous avons ajouté AS ratio
pour donner à la troisième colonne un nom sans ambiguïté et éviter toute ambiguïté. En même temps, remplacez 100
par 100.0
pour éviter la perte de précision causée par la division entière. Fonction d'appel :
<code class="language-sql">SELECT * FROM wordFrequency(123);</code>
De plus, utiliser RETURNS TABLE
pour définir explicitement le type de retour est plus pratique que de renvoyer un enregistrement générique car cela élimine le besoin de spécifier une liste de définitions de colonnes pour chaque appel de fonction. Par exemple :
<code class="language-sql">CREATE OR REPLACE FUNCTION wordFrequency(_max_tokens integer) RETURNS TABLE (text TEXT, cnt BIGINT, ratio NUMERIC) AS $$ BEGIN RETURN QUERY SELECT text, count(*), 100.0 / _max_tokens * count(*) FROM ( SELECT text FROM token WHERE chartype = 'ALPHABETIC' LIMIT _max_tokens ) AS tokens GROUP BY text ORDER BY count DESC; END; $$ LANGUAGE plpgsql;</code>
Remarques importantes :
En suivant ces étapes, vous pouvez utiliser efficacement les fonctions de PostgreSQL pour renvoyer les résultats d'une requête SELECT.
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!