ホームページ > データベース > mysql チュートリアル > PostgreSQL 関数からクエリ結果を返すにはどうすればよいですか?

PostgreSQL 関数からクエリ結果を返すにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-17 10:16:21
オリジナル
762 人が閲覧しました

How to Return Query Results from a PostgreSQL Function?

PostgreSQL 関数でクエリ結果を返す

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 テーブル内の各単語のテキスト、カウント、比率を含むテーブルが返されます。

メモ

  • OUT パラメーターを使用する: 関数ヘッダーで定義された OUT パラメーターは、クエリによって返される列と正確に一致する必要があります。
  • OUT パラメータに慎重に名前を付けます: 潜在的な名前の競合を避けるために、明確な名前を使用してください。予約語やプリミティブ データ型の使用は避けてください。
  • 整数の除算には括弧を使用します: 整数を除算する場合、丸め誤差を最小限に抑えるために除算演算を括弧で囲みます。
  • 数値データ型を検討してください: 浮動小数点数またはパーセントを含む演算の場合、数値データ型を使用すると精度が高くなります。

以上がPostgreSQL 関数からクエリ結果を返すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート