存储过程不使用PostgreSQL

nimxete2  于 2023-06-05  发布在  PostgreSQL
关注(0)|答案(1)|浏览(172)

我有下面的存储过程,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;

非常感谢!山姆

kkih6yb8

kkih6yb81#

为什么要使用存储过程呢,除非这是一个更大的过程(未显示)的一部分。只需一个update语句即可。只需将查询中的m.code_dept = '05'替换为m.code_dept = ANY ARRAY['05','06','07','08'];

update table as m
   set mycolumn = cast(round(m.valeur * (1 + e.evolution / 100)) as integer)
  from evolution as e
 where m.code_dept = any array['05','06','07','08']
   and m.annee = e.annee;

**注意:**作为一个规则,每当你创建一个循环,该循环的主体包含一个语句,那么整个循环可以写在一个语句中。在使用SQL时,您需要考虑整个集合,而不是单个项目。

相关问题