postgresql - Pl/PgSQL select into array

  显示原文与译文双语对照的内容
0 0

下面是我的函数声明和部分内容:


CREATE OR REPLACE FUNCTION access_update()
RETURNS void AS $$
DECLARE team_ids bigint[];
BEGIN
 SELECT INTO team_ids"team_id" FROM"tmp_team_list";

 UPDATE"team_prsnl"
 SET"updt_dt_tm" = NOW(),"last_access_dt_tm" = NOW()
 WHERE"team_id" IN team_ids;
END; $$ LANGUAGE plpgsql;

我希望 team_ids 是int的array,然后我可以在 UPDATE 语句中使用它。 这里函数给我的错误如下:


psql:functions.sql:62: ERROR: syntax error at or near"team_ids"
LINE 13: AND"team_id" IN team_ids;

时间: 原作者:

0 0

UPDATE 语句中使用 FROM 子句更快更简单:


UPDATE team_prsnl p
SET updt_dt_tm = now()
, last_access_dt_tm = now()
FROM tmp_team_list t
WHERE p.team_id = t.team_id;


此外,在使用 array 操作时,WHERE 子句必须是


WHERE team_id = ANY (team_ids)

IN 构造与集合一起工作,而不是数组。

原作者:
0 0

要从 SELECT 创建 array,请执行以下操作:


# select array( select id from tmp_team_list ) ;
?column? 
----------
 {1,2}
(1 row)

IN 运营商记录是右手操作数的子查询。 例如:


UPDATE team_prsnl SET updt_dt_tm = NOW()
 WHERE team_id IN (SELECT id FROM tmp_team_list);

也许你可以完全避免 array,或者尝试提供 array 或者 select from team_ids

原作者:
...