SELECT 和 FUNCTION 调用之间的查询行为不同
背景
为 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您是否使用过 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'.
您提到“连接几个表”功能。你的例子显然没有。如果正在执行连接,则可能会导致结果较少。
日期的解释方式是另一种可能性。当您得到 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?