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