0

我有一个 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;

我的脚本出了什么问题?

4

1 回答 1

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 值中的任何一个未正确转换,则语句将失败

于 2012-07-31T15:33:17.677 回答