首页 > 数据库 > 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板