2016-11-29 5 views
0

関連がない2つのテーブルAとBがあります。oracleで更新後のデータを検証する方法

SQL> select * from A; 

OLD_ID   R_ID 
---------- ---------- 
TA-BC    1 
TB-BC    2 
TC-BC    3 
TD-BC    4 
TE-BC    5 
TF-BC    6 
TG-BC    7 
        8 

SQL> select * from B; 


    NEW_ID OLD_ID  S_CD 
---------- ---------- ----- 
     1 TA-BC  A 
     2 TB-BC  B 
     3 TC-BC  C 
     4 TD-BC  A 
     5 TE-BC  B 
     6 TF-BC  F 
     7 TG-BC  C 
     8 TH-BC  B 

Iは表B A.OLD_ID = B.OLD_IDから "NEW_ID" 値を対応する表Aの "old_id" 欄を更新する必要があります。

私は以下のように書いています。表AとBのデータには約100万のレコードがあり、ここではサンプルデータを示します。データ量が多いため、25kレコードごとに更新し、ループでコミットします。

DECLARE 
    v_cnt number := 1; 
BEGIN 
WHILE v_cnt > 0 LOOP 
    UPDATE /*+ parallel(A 10) */ A a 
    SET a.old_id = 
      (SELECT DISTINCT new_id 
      FROM B b 
      WHERE b.old_id = a.old_id) 
WHERE  EXISTS 
       (SELECT 1 
       FROM B b1 
       WHERE b1.old_id = a.old_id and ROWNUM < 25000; 
    v_cnt := SQL%ROWCOUNT; 
    COMMIT; 
END LOOP; 
END; 
/ 

私は私が更新されてしまったとどのように私はold_idで、テーブルBに一致するレコードを持つテーブルAのすべてのレコードが正常かどうか更新してしまったかどうかを検証することができますどのように多くのレコードを印刷することができますどのように知っていただきたいと思います。テーブルAの "old_id"カラムがテーブルBの "new_id"カラムの値で正しく更新されているかどうかを確認する更新文の前/後に記述できるクエリは何ですか?

以下はテーブル作成スクリプトです。

create table A(old_id varchar2(10),r_id number); 


insert into A values ('TA-BC',1); 
insert into A values ('TB-BC',2); 
insert into A values ('TC-BC',3); 
insert into A values ('TD-BC',4); 
insert into A values ('TE-BC',5); 
insert into A values ('TF-BC',6); 
insert into A values ('TG-BC',7); 
insert into A(r_id) values(8); 
commit; 


create table B(new_id number,old_id varchar2(10),s_cd varchar2(5)); 

insert into B values (1,'TA-BC','A'); 
insert into B values (2,'TB-BC','B'); 
insert into B values (3,'TC-BC','C'); 
insert into B values (4,'TD-BC','A'); 
insert into B values (5,'TE-BC','B'); 
insert into B values (6,'TF-BC','F'); 
insert into B values (7,'TG-BC','C'); 
insert into B values (8,'TH-BC','B'); 
commit; 
+0

'R_ID'と' S_CDを使用して他のテーブルに参加するための正しいデータ型である事実を利用されています'はアップデートを実行するためには必要ありません。彼らがあなたの質問になぜ含まれているのか説明できますか?必要がない場合は削除することをお勧めします。 – Tony

答えて

0

私は、彼らが異なるデータ型であるときは、NEW_IDOLD_IDを交換する理由は見当たらない。OLD_IDは、charであるとNEW_IDは整数です。

テーブルに新しいフィールド(列)を追加してNEW_IDを保存し、それを更新する方がよいでしょう。あなたは、新しい、古いのマッピングを確認することができます

正しく行われ新しいIDがNEW_ID

関連する問題