Asm*_*air 4 postgresql plpgsql
我花了很多时间试图解决它,但我无法解决它.所以,我需要你的帮助.
我正在尝试编写一个返回多行的PL/pgSQL函数.我写的函数如下所示.但它没有用.
CREATE OR REPLACE FUNCTION get_object_fields()
RETURNS SETOF RECORD
AS
$$
DECLARE result_record keyMetrics;
BEGIN
return QUERY SELECT department_id into result_record.visits
from fact_department_daily
where report_date='2013-06-07';
--return result_record;
END
$$ LANGUAGE plpgsql;
SELECT * FROM get_object_fields;
Run Code Online (Sandbox Code Playgroud)
它返回此错误:
错误:RETURN在函数返回集中没有参数;
在"QUERY"或其附近使用RETURN NEXT
Erw*_*ter 10
修复已经指出的错误@Pavel后,还要正确定义返回类型,或者必须为每次调用提供列定义列表.
这个电话:
SELECT * FROM get_object_fields()
Run Code Online (Sandbox Code Playgroud)
要求Postgres知道如何扩展*.由于您要返回匿名记录,因此会出现异常:
错误:返回"记录"的函数需要列定义列表
解决这个问题的一种方法(RETURNS TABLEPostgres 8.4+):
CREATE OR REPLACE FUNCTION get_object_fields()
RETURNS TABLE (department_id int) AS
$func$
BEGIN
RETURN QUERY
SELECT department_id
FROM fact_department_daily
WHERE report_date = '2013-06-07';
END
$func$ LANGUAGE plpgsql;Run Code Online (Sandbox Code Playgroud)
适用于SQL函数的功能完全相同.
这个密切相关答案的更多细节和链接:
PostgreSQL:错误:42601:返回"记录"的函数需要列定义列表
我看到更多错误:
首先,SET RETURNING FUNCTIONS 调用具有以下语法
从 get_object_fields() 中选择*
第二个 - RETURN QUERY 将查询结果直接转发到输出。您无法将此结果存储到变量中 - 现在在 PostgreSQL 中这是不可能的。
开始 返回查询选择....;-- 结果直接转发到输出 返回; -- 不会有下一个结果,执行结束 结尾;
第三 - 这些简单的功能最好用 SQL 语言实现
创建或替换函数 get_object_fields() 返回 SetOF 记录为 $$ 选择部门 ID,其中... $$ 语言 SQL 稳定;
| 归档时间: |
|
| 查看次数: |
23130 次 |
| 最近记录: |