我正在尝试使用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;
$$
我已经使用了行迭代的记录,但无法找到如何将'data'插入'for_loop'表。当我运行此代码时,它给出了以下错误:
ERROR: syntax error at or near "data"
LINE 9: INSERT INTO for_loop values data;
^
这是我的两张桌子。
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
);
我应该在此尝试将“数据”记录插入“for_loop”表中?提前谢谢。
答案 0 :(得分:1)
使用此代码:
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;
$$
答案 1 :(得分:1)
&#39;数据&#39;是无类型记录,所以我必须提到列名来检索此记录的值。
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;
$$
但是使用%rowtype或table类型更灵活,无需提及列名来从变量中检索列值
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;
$$
欢呼:)
答案 2 :(得分:0)
您可以尝试使用某些退出条件循环。
DO LANGUAGE PLPGSQL $$
DECLARE
rec CURSOR FOR SELECT * FROM forall_data;
V_nid numeric;
V_name varchar(15);
V_city varchar(10);
V_contact numeric;
BEGIN
OPEN rec;
LOOP
FETCH rec INTO V_nid ,V_name ,V_city,V_contact;
EXIT WHEN(rec IS NULL);
INSERT INTO for_loop(nid, name , city , contact)
VALUES (V_nid , V_name , V_city , V_contact);
END LOOP;
CLOSE rec;
END;
$$
希望它适合你。
编辑:或者你可以尝试这个,而不使用一个表中的循环插入语句和另一个表中的select语句。
INSERT INTO for_loop(nid, name , city , contact)
select nid, name , city , contact FROM forall_data;