我是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 $$ ...而记录的定义如下:
create type Record as (code char(8), name char(4), num integer, work char(4));发布于 2018-04-12 01:26:38
函数func返回的每一行都映射到一条记录。因此,您得到的错误是,函数结果中的某一行在name和/或work的列位置包含的值大于列所需的值(即4)。
https://stackoverflow.com/questions/49775775
复制相似问题