Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何在通过sqlldr加载时忽略数据文件中不同数量的额外列字段_Oracle_Sql Loader - Fatal编程技术网

Oracle 如何在通过sqlldr加载时忽略数据文件中不同数量的额外列字段

Oracle 如何在通过sqlldr加载时忽略数据文件中不同数量的额外列字段,oracle,sql-loader,Oracle,Sql Loader,我有10个管道分离数据的数据文件。 数据文件的字段数可以少于10个,也可以多于10个。在这种情况下,我应该如何编写控制文件? 我的表中只需要10个字段。 如果字段较少,则应将其填充为null,如果字段较多,则应忽略这些字段。我想说,您正在查找的是后面的null 顺便问一下,由于输入文件中有不同数量的字段,如何加载不同的数据类型?我猜想他们都是VARCHAR2s 下面是一个示例(我只使用了4列;不想输入那么多) 表说明: SQL> desc test Name

我有10个管道分离数据的数据文件。 数据文件的字段数可以少于10个,也可以多于10个。在这种情况下,我应该如何编写控制文件? 我的表中只需要10个字段。
如果字段较少,则应将其填充为null,如果字段较多,则应忽略这些字段。

我想说,您正在查找的是
后面的null

顺便问一下,由于输入文件中有不同数量的字段,如何加载不同的数据类型?我猜想他们都是
VARCHAR2
s

下面是一个示例(我只使用了4列;不想输入那么多)

表说明:

SQL> desc test
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL1                                               VARCHAR2(10)
 COL2                                               VARCHAR2(10)
 COL3                                               VARCHAR2(10)
 COL4                                               VARCHAR2(10)
控制文件:

load data 
infile *
replace
into table test
fields terminated by "|" 
trailing nullcols
(
col1,
col2,
col3,
col4
)

begindata
123|Little|foot|four
456|Access||
789|two|three|four|five|six|seven
111|
正在加载会话及其结果:

SQL> $sqlldr scott/tiger@kc11g control=test31.ctl log=test31.log

SQL*Loader: Release 11.2.0.1.0 - Production on Uto Lis 22 08:02:23 2019

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Commit point reached - logical record count 3
Commit point reached - logical record count 4

SQL> select * from test;

COL1       COL2       COL3       COL4
---------- ---------- ---------- ----------
123        Little     foot       four
456        Access
789        two        three      four
111

SQL>

为了确保这一点,若在数据文件中有一个完整的空行作为输入,那个么表中的所有行都将作为null插入。对吧?我试过了。如果它真的是一个空行(没有字段分隔符,什么都没有),那么就不会加载这样一行。日志文件显示:
1行未加载,因为所有字段均为空。