2

I am trying to update two tables by inserting some rows into the other. But when I try to do something like this :

BEGIN
    FOR id IN (SELECT id FROM table1) LOOP
     PERFORM (INSERT INTO anothertable VALUES(id));
    END LOOP;
END;

It gives an error I don't know why. syntax error at or near "INTO".

Is it even possible to do such thing without cursors and such updating one by one ?

4

2 回答 2

4

这是使用 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 ...) 现在是不支持的功能。

于 2013-10-27T12:21:47.260 回答
1

你为什么不这样插入它:

insert into anothertable
select id from table
于 2013-10-27T11:39:45.327 回答