我试图通过在另一个表中插入一些行来更新两个表。但是,当我尝试做这样的事情时:
BEGIN
FOR id IN (SELECT id FROM table1) LOOP
PERFORM (INSERT INTO anothertable VALUES(id));
END LOOP;
END;
它给出了一个错误,我不知道为什么。 syntax error at or near "INTO"
。
甚至可以在没有游标的情况下做这样的事情并逐个更新吗?
答案 0 :(得分:3)
这是使用PERFORM和糟糕的plpgsql编程风格的不良示例。你不能在那里使用PERFORM。你不应该在那里使用括号(PL / pgSQL基于ADA语言 - 而不是C!)。一些正确的模式是:
FOR _id IN
SELECT s.id
FROM sometab s
LOOP
INSERT INTO othertab(id) VALUES(_id);
END LOOP;
或更快(和更短)的模式
INSERT INTO othertab(id)
SELECT id
FROM other tab
我使用了限定名称和前缀来降低SQL标识符和PL / pgSQL变量之间发生冲突的风险。
注意:PERFORM是作为SELECT语句实现的,没有结果处理。所以你的陈述是SELECT(INSERT INTO tab ...)现在不支持的功能。
答案 1 :(得分:1)
为什么不这样插入:
insert into anothertable
select id from table