ホームページ >データベース >mysql チュートリアル >PostgreSQL 関数から SELECT クエリ結果を正しく返すにはどうすればよいですか?
PostgreSQL 関数で SELECT クエリの結果を返す
PostgreSQL では、関数を使用して SELECT クエリの結果を返すには、適切な構文と戻り値の型を理解する必要があります。提供されている関数の 1 つを調べて、クエリ結果を正しく取得する方法を説明します。
問題の関数 wordFrequency
には現在、正しい return ステートメントがありません。この問題を解決するには、RETURN QUERY
構文を使用します。
修正された関数:
<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>
キーポイント:
RETURN QUERY
構文を使用すると、SELECT クエリの結果を直接返すことができます。 SETOF RECORD
は、関数がレコードのセットを返すことを示します。 text
や count(*)
など) は、クエリ内の列名と一致する必要があります。 AS ratio
を追加して、3 番目の列に明確な名前を付け、曖昧さを回避しました。 同時に、整数の除算による精度の低下を避けるために、100
を 100.0
に変更します。 関数の呼び出し:
<code class="language-sql">SELECT * FROM wordFrequency(123);</code>
さらに、RETURNS TABLE
を使用して戻り値の型を明示的に定義すると、関数呼び出しごとに列定義のリストを指定する必要がなくなるため、汎用レコードを返すよりも実用的です。 例:
<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>
重要な注意事項:
これらの手順に従うことで、PostgreSQL の関数を効率的に使用して SELECT クエリの結果を返すことができます。
以上がPostgreSQL 関数から SELECT クエリ結果を正しく返すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。