我有一个txt文件如下。 1st machine_no,2nd emp_no,3rd shift_type(1表示输入,3表示退出,也可以是4表示输入(多个输入),5表示退出(多个退出),第5个work_date,第6个是时间。
001,0000000021,01,2011/06/21,06:50,
001,0000000026,01,2011/06/21,14:00,
001,0000000018,01,2011/06/21,07:00,
001,0000000021,03,2011/06/21,14:00,
001,0000000018,03,2011/06/21,16:50,
001,0000000026,03,2011/06/21,16:55,
001,0000000023,01,2011/06/21,07:20,
001,0000000023,03,2011/06/21,16:30,
001,0000000023,01,2011/06/22,07:20,
001,0000000023,03,2011/06/22,16:30,
001,0000000023,01,2011/06/23,07:20,
001,0000000023,03,2011/06/23,16:30,
我想将txt文件中的数据加载到oracle表中,如下所示:
EMP_NO WORK_DATE START_TIME END_TIME
------ ------------- ----------------------- -------------------
26 21-06-2011 00:00:00 21-06-2011 14:00:00 21-06-2011 16:55:00
18 21-06-2011 00:00:00 21-06-2011 07:00:00 21-06-2011 16:50:00
23 21-06-2011 00:00:00 21-06-2011 07:20:00 21-06-2011 16:30:00
23 22-06-2011 00:00:00 22-06-2011 07:20:00 22-06-2011 16:30:00
23 23-06-2011 00:00:00 23-06-2011 07:20:00 23-06-2011 16:30:00
21 21-06-2011 00:00:00 21-06-2011 06:50:00 21-06-2011 14:00:00
请告知什么是最简单的&用代码完成它的最快方法。感谢您的帮助。
答案 0 :(得分:2)
SQLLDR + SQL脚本是将数据加载到数据库的绝佳方式。
但是,如果您使用的是Oracle 9i及更高版本,我认为,最简单的解决方案必须是使用external tables,但您需要将文件放到数据库可以访问的某个存储上(samba共享)或NFS挂载文件系统)
sqlldr& s之间的性能差异很小。外部表格。 (尽管它们处理约束违规的方式有所不同)
答案 1 :(得分:2)
查看您提供的数据片段应该使用外部表格,这应该是关闭的:
CREATE TABLE file_table
(machine_no VARCHAR2(3),
emp_no VARCHAR2(10),
shift_type VARCHAR2(2),
work_date VARCHAR2(10),
time VARCHAR2(5)
)
ORGANIZATION EXTERNAL
(
DEFAULT DIRECTORY file_dir
ACCESS PARAMETERS
(
RECORDS DELIMITED BY NEWLINE
FIELDS TERMINATED BY ','
(
machine_no CHAR(3),
emp_no CHAR(10),
shift_type CHAR(2),
work_date CHAR(10),
time CHAR(5)
)
)
LOCATION
(
file_dir:'<file_name_including_extension>'
)
)
NOPARALLEL;
您必须创建一个逻辑oracle目录,该目录指向可以放置数据文件的物理服务器目录(默认情况下,外部表也会将其日志写入该目录)。
CREATE OR REPLACE DIRECTORY file_dir AS '<server-directory-path>';
完成此操作后,您可以从file_table中进行选择,然后根据您的选择移动或转换数据。
N.B。我将字段保存为VARCHAR2,但您可以根据需要to_date或to_number。我更喜欢在数据库中转换数据后,您可能更愿意在外部表中进行...
请参阅Kevin Burton关于外部表格操作方法链接的答案。
希望这会有所帮助......