【发布时间】:2020-09-17 19:11:07
【问题描述】:
我似乎无法弄清楚这一点,以下是尝试使用 pgadmin 查询工具在 postgres 中作为 foreach 循环运行的项目数组,对于数组中的每个项目 x,执行 2 个插入语句其中x 是每个数组值:
我根据https://www.postgresql.org/docs/current/plpgsql-control-structures.html#PLPGSQL-FOREACH-ARRAY 第 42.6.7 节进行了尝试。遍历数组,这里有一些伪代码:
DO
$do$
BEGIN
FOREACH x IN ['Apple','Banana','Cantaloupe']
LOOP
INSERT INTO foods.fruits(id, comment, fruit_name)
VALUES ((SELECT MAX(id) + 1 FROM foods.fruits), 'a comment', x);
INSERT INTO foods.fruits_ordered(id, price, fruit_id)
VALUES ((SELECT MAX(id) + 1 FROM foods.fruits_ordered), '5.00', (SELECT id FROM foods.fruits WHERE fruit_name = x));
END LOOP;
END
$do$;
这应该运行循环 3 次,总共进行 6 次插入。 知道如何让它工作吗?
【问题讨论】:
-
select max() + 1是一种生成唯一 ID 的糟糕方法。您应该使用serial列(基于序列)。但是您不需要 PL/pgSQL 或循环开头:dbfiddle.uk/… -
你得到什么错误?
-
抱歉错过了第一个插入中的评论字段,第二个插入中的价格字段刚刚更新了它们,我得到的错误是 ERROR: syntax error at or near "[" btw
标签: postgresql for-loop plpgsql