我正在考虑更改使用外部工具完成的数据加载,以使用该工具基于多个连接生成平面文件,然后使用SQL * Loader加载到表中。
我想不再使用这个程序并使用外部表,而是将表插入移动到数据库中。我不确定我的联接的有效性与程序正在做的事情有关。当我比较使用外部表格所做的事情时,我有14702052条记录和14268891条不同的记录。当我用加载了旧工具的表与相同数据进行比较时,我有14669198条记录,与14268888不同。我并不担心总数,因为重复项是可以的,它正在更新一些值,重复应该不重要。
我似乎无法弄清楚什么是额外的不同值。我已经尝试过减去,不是,不存在,加入,也许是其他一些尝试我不记得我的头脑,但我没有记录。表中没有主键可以加入,这使得检查很难。
如果记录较少,我可以使用Kdiff3进行比较,但是因为它的输出太大而无法在我的计算机上运行。我可能试图通过rownum将其分解为最坏的情况,试图找到额外的记录。
任何人对替代方案有任何建议吗?
编辑: 这是表结构,不得不删除一些名称
CREATE TABLE T (
ID varchar2(11 byte),
CLASS_CD varchar2(4 byte),
ITEM_NAME varchar2(60 byte),
UNIT_OF_ISSUE varchar2(2 byte),
PRICE number(15,2),
ITEM_CD varchar2(3 byte),
SERVICE_CD varchar2(2 byte));
这是一个示例记录,虽然我已经替换了大部分灵敏度值。
ID CLASS_CD ITEM_NAME UOI PRICE ITEM_CD SERVICE_CD
000000057 1111 NAME FT 5.91 NULL BC
答案 0 :(得分:3)
假设您在同一结构中同时拥有新旧表,这应该至少为您提供3条记录
select * from new_table
minus
select * from old_table
无论如何,请使用此查询来查找差异
select count(case when tab='O' then 1 end) as cnt_old
,count(case when tab='N' then 1 end) as cnt_new
,id,class_cd,item_name,uoi,price,item_cd,service_cd
from ( select 'O' as tab,t.* from old_table t
union all select 'N' ,t.* from new_table t
) t
group by id,class_cd,item_name,uoi,price,item_cd,service_cd
having count(case when tab='O' then 1 end) = 0
or count(case when tab='N' then 1 end) = 0
;