PostgreSQL は、RETURN QUERY
ステートメントを使用して関数内からクエリ結果を返します。この方法は、関数出力の一部としてクエリ結果が必要な場合に特に便利です。
次の関数を考えてみましょう:
<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>
この関数はクエリ結果を返そうとしますが、重要な部分である RETURN QUERY
ステートメントが欠落しています。
クエリ結果を返すには、次のように RETURN QUERY
ステートメントを使用します。
<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>
この関数を実行するには、次のステートメントを使用できます:
<code class="language-sql">SELECT * FROM word_frequency(123);</code>
これにより、token
テーブル内の各単語のテキスト、カウント、比率を含むテーブルが返されます。
以上がPostgreSQL 関数からクエリ結果を返すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。