我是Postgres的新手,目前正在尝试编写一个接受整数的函数,然后使用该输入调用另一个(肯定正常工作的)预写函数。如果我直接调用预先编写的函数,例如:
select * from func(3456789);
我得到了我期望的结果,没有错误。但是,如果我在我的函数中调用它:
create or replace function my_func(_id integer)
returns setof Record
as $$
declare
rec Record;
begin
for rec in
select * from func(_id)
loop
return next rec;
end loop;
end;
$$ language plpgsql
;
我用完全相同的参数调用它:
select * from my_func(3456789);
我收到以下错误:
ERROR: value too long for type character(4)
CONTEXT: PL/pgSQL function my_func(integer) line 5 at FOR over SELECT rows
为什么这两种情况不同,我该如何解决?
编辑:
func(_sid)返回:
CREATE FUNCTION func(_sid integer) RETURNS SETOF Record
LANGUAGE plpgsql
AS $$ ...
和Record定义如下:
create type Record as (code char(8), name char(4), num integer, work char(4));
答案 0 :(得分:0)
函数func
返回的每一行都映射到一个记录。
因此,您得到的错误表示函数结果中的一行包含name
和/或work
的列位置,其值大于列所需的值(值为4)。