Oracle SQL加载程序控制文件分隔符

Oracle SQL加载程序控制文件分隔符,sql,oracle,sql-loader,Sql,Oracle,Sql Loader,我想将客户信息表导入我的数据库。下面简要显示了数据文件(纯文本)的结构 "Cust_ID Cust_Name Level" "0001 Eric Cartman 05" "0002 Kyle Broflovski 02" 由“括起的每一行都是一条记录,分隔符是一个选项卡。因此,在我的SQL Loader控制文件中,我将编写如下内容: FIELDS TERMINATED BY ' ' (Cust_ID, --????? Cust_Name,

我想将客户信息表导入我的数据库。下面简要显示了数据文件(纯文本)的结构

"Cust_ID    Cust_Name   Level"
"0001   Eric Cartman    05"
"0002   Kyle Broflovski 02"
括起的每一行都是一条记录,分隔符是一个选项卡。因此,在我的SQL Loader控制文件中,我将编写如下内容:

FIELDS TERMINATED BY '  '
    (Cust_ID, --?????
     Cust_Name,
     Level TERMINATED BY '"' )
我想告诉SQL loader忽略每个
客户ID
之前的
。我应该在这里添加什么?谢谢。

您可以使用忽略记录开头的双引号。这定义了一个我名义上称之为
quote
的填充字段,该字段以第一个
结尾:

在这种情况下,
quote
字段的值将为空,但我们将忽略它,因此这并不重要

将数据文件作为表,定义为:

create table t42(cust_id number, cust_name varchar2(20), cust_level number);
…您的数据被插入为:

select * from t42;

   CUST_ID CUST_NAME            CUST_LEVEL
---------- -------------------- ----------
         1 Eric Cartman                  5
         2 Kyle Broflovski               2

我之所以调用第三列
cust_level
,是因为
level
是一个保留字;您可以强制使用它,但这会让您感到痛苦。另外请注意,我使用了
truncate
,因此这将替换表中的任何现有数据;如果您要添加新数据,请将其更改为
append
首先将其加载到暂存表中,并加上引号。然后您可以通过更新查询将其删除。@DanBracuk谢谢您的评论。如果这是一个真实案例而不是家庭作业,我肯定会按照您所说的做。但由于这是家庭作业,而且要求只是将其加载到暂存表中,我想我应该找到一些使暂存表看起来漂亮的方法:(您知道一旦数据在暂存表中,如何去掉引号吗?
select * from t42;

   CUST_ID CUST_NAME            CUST_LEVEL
---------- -------------------- ----------
         1 Eric Cartman                  5
         2 Kyle Broflovski               2