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