我需要为满足特定条件的大型记录集手动运行一个过程。如果我手动包含一个ID,它可以很好地工作,但由于某种原因,如果我只是告诉它从表中获取一个ID列表,它就不起作用。无错误;但是丢失的数据不会从过程中添加到表中。
据我所知,这应该很好,但事实并非如此:
select fa_sptl_cross(id, geom) from focus_area where generation_id = 3;
但这很好
select fa_sptl_cross(id, geom) from focus_area where id = 312231;
即使这样也应该奏效,不是吗?
select fa_sptl_cross(id, geom) from focus_area
想法?
AFAIK,问题不可能是程序,因为尝试这样做失败了任何程序我尝试
请向我解释一下这个函数(fa_sptl_cross
(的作用是什么?如果你能写出这个函数的源代码,我就可以对此进行分析。
一般来说,我知道当您使用where id = 312231
时,您的查询返回一条记录,这就是为什么您的函数工作良好的原因。因为您的函数有一个输入参数id
。在其他方式中,查询返回、许多记录、许多id,所以您的函数不起作用。所以我必须查看这个函数的源代码。我想是的。
我使用PL/pgSQL中提供的信息来执行
我的解决方案如下:
DO $$
BEGIN
PERFORM habits4.fav_sptl_cross(focus_area_id, geom) from habits4.focus_area_version where generation_id = 3;
END;
$$;