2014-10-03 240 views
-2

我想从txt文件导入数据到表。 TXT文件有5个记录。 'ext.txt'是我的文件.'IMPORT'是一个目录。导入csv文件到oracle数据库

记录是

7499,ALLEN,SALESMAN,30 
7521,WARD,SALESMAN,30 
7566,JONES,MANAGER,20 
7654,MARTIN,SALESMAN,30 

我想下面的查询,但其只插入第3的记录到外部表。

任何人都可以为我提供此ans解决方案插入所有行的原因。

create table ext_tab (
    empno CHAR(4), 
    ename CHAR(20), 
    job1 CHAR(20), 
    deptno CHAR(2) 
) 
ORGANIZATION EXTERNAL (
TYPE ORACLE_LOADER 
DEFAULT DIRECTORY IMPORT 
ACCESS PARAMETERS (
    RECORDS DELIMITED BY NEWLINE 
    BADFILE IMPORT:'test.bad' 
    LOGFILE IMPORT:'test.log' 
    FIELDS TERMINATED BY ',' (
    empno char(4) , 
    ename char(4), 
    job1 CHAR(20), 
    deptno CHAR(2) 
    ) 
) 
LOCATION (import:'ext.txt') 
) 
PARALLEL 5 
REJECT LIMIT UNLIMITED; 
+1

在导入规范中将'ename char(4),''改为'ename char(20)''。顺便说一句,你可以检查test.bad文件之前发布在这里 – cha 2014-10-03 05:45:47

+0

羽绒被投了两次问相同的问题https://stackoverflow.com/questions/26173037/insert-data-from-csv-file-to-sql-表 – 2014-10-03 07:27:24

+0

为什么投两个问题?只需关闭最差的一个(在这种情况下,另一个因为没有测试数据或工作代码)。 – Lunc 2014-10-03 08:46:59

回答

0

这会为你给出的测试数据

CREATE TABLE ext_tab (
    empno VARCHAR(4), 
    ename VARCHAR(20), 
    job1 VARCHAR(20), 
    deptno VARCHAR(2) 
) 
ORGANIZATION EXTERNAL (
    DEFAULT DIRECTORY import 
    ACCESS PARAMETERS (
    RECORDS DELIMITED BY NEWLINE 
    FIELDS TERMINATED BY ',' 
) 
LOCATION ('ext.txt') 
); 

提供您已正确设置了import目录工作。

测试在11.2.0.4

至于有人在上面的评论中给出的原因。总是首先检查.bad.log文件(在放置文件的目录中创建)。这些非常有助于告诉你为什么行被拒绝。

我希望你在日志中这样的错误: -

KUP-04021: field formatting error for field ENAME     
KUP-04026: field too long for datatype        
KUP-04101: record 1 rejected in file /import_dir/ext.txt  
KUP-04021: field formatting error for field ENAME     
KUP-04026: field too long for datatype        
KUP-04101: record 3 rejected in file /import_dir/ext.txt  
KUP-04021: field formatting error for field ENAME     
KUP-04026: field too long for datatype        
KUP-04101: record 4 rejected in file /import_dir/ext.txt  

,只有病房进口,因为只有他的名字融入CHAR(4)