SELECT 和 FUNCTION 调用之间的查询行为不同

发布于 2024-10-06 15:53:38 字数 381 浏览 0 评论 0原文

背景

为 SQL 语句创建包装函数。

问题

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

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

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

问题

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

任何想法都会非常有帮助。

谢谢你!

Background

Creating a wrapper function for a SQL statement.

Problem

A function returns 1 row, whereas the query upon which the function is based returns 100+ rows. The parameter values are identical:

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

The tasc_fsa function is a SELECT statement with a few table joins; the function language is 'sql' rather than 'plpgsql'.

Question

What reasons would a function return a single row yet the exact same query that the function uses, when not called via the function, correctly returns over 100 rows?

Any ideas would be most helpful.

Thank you!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

今天小雨转甜 2024-10-13 15:53:38

您是否使用过 RETURN SETOF ...?

SETOF 表示您要返回多于 1 行。

我很确定您忘记使用“RETURN SETOF”。

Have you use RETURN SETOF ...?

SETOF indicates you want to return more than 1 row.

I'm pretty sure you forgot to use 'RETURN SETOF'.

暗恋未遂 2024-10-13 15:53:38

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

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

You mention the function "joins a few tables". Your example obviously doesn't. If there are joins being performed, it is possible this is causing less results.

The way the dates are being interpreted is another possibility. When you get 1 answer, is it within the range you specify?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文