如何解决使用java将csv数据与oracle数据库表进行比较
我需要将我的 csv 文件数据与 oracle 数据库表进行比较。数据包含近 9000 行。任何链接和来源我怎么能做到这一点。 我正在使用这个线程,但它在列表字符串中使用了 equals 方法,但这不会逐行比较 csv 和数据库表中的数据
Compare csv file with MySQL database
解决方法
爪哇?我不会说 Java。但是,由于它是一个 Oracle 数据库,我建议使用另一种方法 - 外部表。下面是一个基于 Scott 的示例架构及其 DEPT
表的示例。 CSV 文件包含“适合”该表的数据,但是 - 我想看看它们之间的差异。
test_dept.csv
文件:
10,ACCOUNTING,NEW YORK
20,SALES,CHICAGO
30,RESEARCH,DALLAS
40,OPERATIONS,BOSTON
50,CIA,LANGLEY
外部表:为了使用它,必须有一个目录(第 8 行)(指向文件系统目录的 Oracle 对象,通常位于数据库服务器上。它包含 csv 文件(第 18 行)) ;将使用它的用户必须至少拥有 read
权限:
SQL> create table dept_ext
2 (deptno char(2),3 dname char(20),4 loc char(20)
5 )
6 organization external (
7 type oracle_loader
8 default directory ext_dir
9 access parameters (
10 records delimited by newline
11 fields terminated by ','
12 missing field values are null
13 ( deptno char(2),14 dname char(20),15 loc char(20)
16 )
17 )
18 location ('test_dept.csv')
19 )
20 reject limit unlimited;
Table created.
它是否看到任何数据?
SQL> select * from dept_ext;
DE DNAME LOC
-- -------------------- --------------------
10 ACCOUNTING NEW YORK
20 SALES CHICAGO
30 RESEARCH DALLAS
40 OPERATIONS BOSTON
50 CIA LANGLEY
是的,确实如此。 “原始”dept
表中有什么?
SQL> select * from dept;
DEPTNO DNAME LOC
---------- -------------- -------------
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
好的,那现在怎么办?由于它是一个“表”,您可以编写任何您想要的 select
,将其加入其他表...例如:数据库表中不存在 csv 文件中的哪些部门?
SQL> select * from dept_ext
2 where deptno not in (select deptno from dept);
DE DNAME LOC
-- -------------------- --------------------
50 CIA LANGLEY
如果我加入 deptno
上的表,部门名称有什么不同吗?
SQL> select e.deptno,e.dname,e.loc,d.dname,d.loc
2 from dept_ext e join dept d on d.deptno = e.deptno
3 and trim(d.dname) <> trim(e.dname);
DE DNAME LOC DNAME LOC
-- -------------------- -------------------- -------------- -------------
20 SALES CHICAGO RESEARCH DALLAS
30 RESEARCH DALLAS SALES CHICAGO
SQL>
等等。看起来它可能做你想做的事。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。