我有下面的存储过程,postgresql没有做任何更新,而下面的第二个(在存储过程之外)工作得很好。我是存储过程的新手,很难找到原因。你知道吗?
不工作的一个:
DECLARE
departements TEXT[];
dept TEXT;
BEGIN
departements := ARRAY['05','06','07','08'];
FOREACH dept IN ARRAY departements LOOP
raise info '%', dept;
UPDATE table AS m SET mycolumn = CAST(round(m.valeur * (1 + e.evolution / 100)) AS integer) FROM evolution AS e WHERE m.code_dept = dept AND m.annee = e.annee;
END LOOP;
END;
正在工作的那个(但具有单个值'05'并且在存储过程之外):
UPDATE table AS m SET mycolumn = CAST(round(m.valeur * (1 + e.evolution / 100)) AS integer) FROM evolution AS e WHERE m.code_dept = '05' AND m.annee = e.annee;
非常感谢!山姆
1条答案
按热度按时间kkih6yb81#
为什么要使用存储过程呢,除非这是一个更大的过程(未显示)的一部分。只需一个
update
语句即可。只需将查询中的m.code_dept = '05'
替换为m.code_dept = ANY ARRAY['05','06','07','08'];
**注意:**作为一个规则,每当你创建一个循环,该循环的主体包含一个语句,那么整个循环可以写在一个语句中。在使用SQL时,您需要考虑整个集合,而不是单个项目。