nny*_*yby 9 sql postgresql plpgsql postgresql-9.1
这是我的函数声明和正文的一部分:
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;
Run Code Online (Sandbox Code Playgroud)
我想team_ids
成为一个我可以在UPDATE
声明中使用的一组int .这个函数给我这样的错误:
psql:functions.sql:62: ERROR: syntax error at or near "team_ids"
LINE 13: AND "team_id" IN team_ids;
Run Code Online (Sandbox Code Playgroud)
Erw*_*ter 11
更快更简单的用FROM
在您的条款UPDATE
声明:
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;
Run Code Online (Sandbox Code Playgroud)
除此之外,在使用数组操作时,该WHERE
子句必须是
WHERE team_id = ANY (team_ids)
Run Code Online (Sandbox Code Playgroud)
该IN
构造使用集合,而不是数组.
要从 a 创建数组SELECT
:
# select array( select id from tmp_team_list ) ;
?column?
----------
{1,2}
(1 row)
Run Code Online (Sandbox Code Playgroud)
该IN
运算符被记录为对右侧操作数进行子查询。例如:
UPDATE team_prsnl SET updt_dt_tm = NOW()
WHERE team_id IN (SELECT id FROM tmp_team_list);
Run Code Online (Sandbox Code Playgroud)
也许您可以完全避免使用数组,或者尝试提供数组或select from team_ids
.
归档时间: |
|
查看次数: |
15050 次 |
最近记录: |