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

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

Patricia Arquette
發布: 2025-01-17 10:16:21
原創
763 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板