当返回类型为记录类型postgres时,函数仅返回一列

时间:2015-01-15 15:38:29

标签: postgresql postgresql-8.4

我有一个具有记录返回类型的函数。

下面是我正在使用的函数,基本上是函数的作用,它接受输入参数并查询数据库以返回列:

drop function if exists test_proc(sr_number1 bigint);
create or replace function test_proc(sr_number1 bigint) RETURNS record /*SETOF tbl*/ AS $$

declare
i integer default 0;
record_type record;
begin
select sr_num,product_number,phone,addr into record_type from my_table where sr_num=sr_number1;
return record_type;
end
$$ LANGUAGE plpgsql; 

不幸的是,当我执行函数

选择test_proc(12345);我将结果作为逗号分隔列表只在一列中得到,如(sr_num,product_number,phone,addr)。但我希望它返回的是一个包含列值及其各自列名的表行。

我也尝试将函数作为

执行
select * from test_proc(12345); but get the following error

ERROR:  a column definition list is required for functions returning "record"

1 个答案:

答案 0 :(得分:1)

查询返回记录的函数时,必须指定要在结果中获取的记录类型

 select * from test_proc(12345) f(b bigint, t text);

这应该有用。

更好的解决方案是在函数

中声明记录类型
 CREATE OR REPLACE FUNCTION test_proc(sr_number1 bigint) 
 RETURNS TABLE(b bigint, t text) AS $$  $$