首頁 >資料庫 >mysql教程 >如何從 PostgreSQL 函數傳回查詢結果?

如何從 PostgreSQL 函數傳回查詢結果?

Patricia Arquette
Patricia Arquette原創
2025-01-17 10:16:21764瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn