我有一个PostgreSQL数据库,我想创建一个脚本,将表A的一列数据替换为其他表列的数据。我写过这个PL / PgSQL函数:
BEGIN;
CREATE TEMPORARY TABLE tmp_table (id bigint PRIMARY KEY,
registrationnumber character varying(255));
INSERT INTO tmp_table
select id,registrationnumber from tableB;
for d in tmp_table loop
update TABLEA set registrationnumber=d.id where
registrationnumber=d.registrationnumber;
return next d;
end loop;
END;
我的剧本出了什么问题?
答案 0 :(得分:2)
没有理由在循环中执行此操作 - 让数据库引擎为您执行此操作。
UPDATE tablea
SET registrationnumber = tableb.id
FROM tableb
WHERE tablea.registrationnumber = tableb.registrationnumber;
select * from tablea;
请参阅此SQLFiddle:
http://sqlfiddle.com/#!1/1281b/1
请注意,您隐式地将varchar值转换为bigint。如果这些varchar值中的任何一个未正确转换,则语句将失败。