Heim >Datenbank >MySQL-Tutorial >Wie kann ich SELECT-Abfrageergebnisse von einer PostgreSQL-Funktion korrekt zurückgeben?
SELECT-Abfrageergebnisse in der PostgreSQL-Funktion zurückgeben
In PostgreSQL erfordert die Verwendung von Funktionen zur Rückgabe der Ergebnisse einer SELECT-Abfrage das Verständnis der entsprechenden Syntax und des Rückgabetyps. Wir untersuchen eine der bereitgestellten Funktionen und zeigen Ihnen, wie Sie Abfrageergebnisse korrekt abrufen.
Der betreffenden Funktion wordFrequency
fehlt derzeit eine korrekte Return-Anweisung. Um dieses Problem zu lösen, verwenden wir die Syntax RETURN QUERY
.
Korrigierte Funktion:
<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>
Wichtige Punkte:
RETURN QUERY
-Syntax können Sie die Ergebnisse einer SELECT-Abfrage direkt zurückgeben. SETOF RECORD
gibt an, dass die Funktion eine Reihe von Datensätzen zurückgibt. text
und count(*)
) müssen mit den Spaltennamen in der Abfrage übereinstimmen. Wir haben AS ratio
hinzugefügt, um der dritten Spalte einen eindeutigen Namen zu geben und Mehrdeutigkeiten zu vermeiden. Ändern Sie gleichzeitig 100
in 100.0
, um Präzisionsverluste durch Ganzzahldivision zu vermeiden. Aufruffunktion:
<code class="language-sql">SELECT * FROM wordFrequency(123);</code>
Darüber hinaus ist die Verwendung von RETURNS TABLE
zur expliziten Definition des Rückgabetyps praktischer als die Rückgabe eines generischen Datensatzes, da dadurch die Angabe einer Liste von Spaltendefinitionen für jeden Funktionsaufruf entfällt. Zum Beispiel:
<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>
Wichtige Hinweise:
Indem Sie diese Schritte befolgen, können Sie Funktionen in PostgreSQL effizient nutzen, um die Ergebnisse einer SELECT-Abfrage zurückzugeben.
Das obige ist der detaillierte Inhalt vonWie kann ich SELECT-Abfrageergebnisse von einer PostgreSQL-Funktion korrekt zurückgeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!