使用postgres for循环中的记录将记录从一个表插入到另一个表

Ami*_*ain 6 postgresql for-loop record

我正在尝试使用 for...循环将数据从一个表插入到 postgres 中的另一个表。下面给出了该方法。

DO LANGUAGE PLPGSQL $$
DECLARE
data record;

BEGIN

FOR data IN SELECT * FROM forall_data
LOOP
INSERT INTO for_loop values data;<br>
END LOOP;
END;
$$ 
Run Code Online (Sandbox Code Playgroud)

我已使用记录进行行迭代,但无法找到如何将该“数据”插入“for_loop”表中。当我运行此代码时,出现以下错误:

ERROR:  syntax error at or near "data"
LINE 9: INSERT INTO for_loop values data;
                                    ^
Run Code Online (Sandbox Code Playgroud)

这是我的两张桌子。

create table forall_data(
nid numeric(15,0)not null,
name varchar(15) not null,
city varchar(10) not null,
contact numeric(11,0) not null
);

create table for_loop(
nid numeric(15,0)not null,
name varchar(15) not null,
city varchar(10) not null,
contact numeric(11,0) not null
); 
Run Code Online (Sandbox Code Playgroud)

我应该在这里尝试什么将该“数据”记录插入“for_loop”表中?提前致谢。

Ami*_*ain 5

“data”是无类型记录,因此我必须提及列名来检索该记录的值。

DO LANGUAGE PLPGSQL $$
DECLARE
data record;

BEGIN

FOR data IN SELECT * FROM forall_data
LOOP
INSERT INTO for_loop values (data.nid,data.name,data.city,data.contact);
END LOOP;
END;
$$ 
Run Code Online (Sandbox Code Playgroud)

但使用 %rowtype 或表类型更灵活,无需提及列名即可从变量中检索列值

DO LANGUAGE PLPGSQL $$
DECLARE
data forall_data;  --- or data forall_data%rowtype 

BEGIN

FOR data IN SELECT * FROM forall_data
LOOP
INSERT INTO for_loop select (data).*;
END LOOP;
END;
$$ 
Run Code Online (Sandbox Code Playgroud)

干杯:)


Pio*_*r R 4

使用此代码:

DO LANGUAGE PLPGSQL $$
DECLARE
rec record;

BEGIN

FOR rec IN SELECT * FROM budzet.forall_data
LOOP
INSERT INTO budzet.for_loop(nid, name , city , contact)
    VALUES (rec.nid, rec.name , rec.city , rec.contact);

END LOOP;
END;
$$ 
Run Code Online (Sandbox Code Playgroud)