【问题标题】:Query behaviour differs between SELECT and FUNCTION callSELECT 和 FUNCTION 调用之间的查询行为不同
【发布时间】:2010-12-07 20:03:51
【问题描述】:

背景

为 SQL 语句创建包装函数。

问题

一个函数返回 1 行,而该函数所基于的查询返回 100+ 行。参数值相同:

SELECT * FROM as_rpt.tasc_fsa( 'ABC', '2010-01-01'::date, '2011-01-01'::date );

tasc_fsa 函数是一个带有几个表连接的 SELECT 语句;函数语言是 'sql' 而不是 'plpgsql'。

问题

什么原因会返回单行但该函数使用的查询完全相同,当不通过该函数调用时,正确返回超过 100 行?

任何想法都会很有帮助。

谢谢!

【问题讨论】:

    标签: function postgresql sql


    【解决方案1】:

    你有没有使用 RETURN SETOF ...?

    SETOF 表示要返回多于 1 行。

    我很确定你忘了使用“RETURN SETOF”。

    【讨论】:

      【解决方案2】:

      您提到了“连接几个表”的功能。你的例子显然没有。如果正在执行连接,则可能会导致较少的结果。

      日期的解释方式是另一种可能性。得到 1 个答案时,是否在您指定的范围内?

      【讨论】:

      • 我在函数使用的查询中包含了源代码。当执行部分函数时,查询产生 1 行。当使用完全相同的参数运行完全相同的查询(字面意思是复制和粘贴)时,将返回 100 多行。希望能澄清事情。
      • 我仍然怀疑 $1 和 $2(日期范围)正在以某种方式更改。尝试将您的日期范围硬编码到函数中,看看会发生什么。
      • 我使用了错误的函数定义模板。 :-( 我有多种函数,一些返回单行,一些返回多行。我使用“单行”返回函数之一作为起点编写函数,从没想过检查函数原型。谢谢,不过!
      猜你喜欢
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 2021-12-22
      • 2017-09-10
      • 2014-02-05
      • 1970-01-01
      相关资源
      最近更新 更多