0

PostgreSQL データベースがあり、テーブル A の 1 つの列のデータを他のテーブルの列のデータに置き換えるスクリプトを作成したいと考えています。私はこの 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 に答える