0
更新後驗證數據我有兩個表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
我需要表A來更新列 「old_id」 與來自表B,其中A.OLD_ID = B.OLD_ID相應的 「NEW_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;
/
我想知道我怎麼能打印多少記錄得到了更新,我怎麼能驗證是否在表中的所有記錄:A具有表B中的匹配記錄與old_id已經得到了正確或不更新。我可以在更新語句之前/之後編寫什麼查詢來驗證表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