2013-10-05 167 views
0

我想将客户信息表导入到我的数据库。数据文件的结构(纯文本)简要显示如下。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, 
    Level TERMINATED BY '"') 

我想告诉SQL加载到互不理睬Cust_ID"。我应该在这里添加什么?谢谢。

+0

我建议先将它加载到临时表中,并附上引号。然后你可以用更新查询来摆脱它们。 –

+0

@DanBracuk感谢您的评论。如果这是一个真实的案例,而不是功课,我肯定会照你所说的去做。但由于它是家庭作业,并且要求只是将其加载到临时表中,所以我想我应该找到一些方法来使临时表看起来很漂亮:( – goldfrapp04

+0

一旦数据存在,你知道如何摆脱引号登台表? –

回答

1

您可以使用filler field忽略记录开始处的双引号。这定义填充字段我名义上叫quote这是由第一"终止:

options (skip=1) 
load data 
truncate into table t42 
fields terminated by ' ' 
(
    quote filler terminated by '"', 
    cust_id, 
    cust_name, 
    cust_level terminated by '"' 
) 

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