Oracle SQL Loader控制文件分隔符

时间:2013-10-05 23:09:45

标签: 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,
     Level TERMINATED BY '"' )

我想告诉SQL loader在每个"之前忽略Cust_ID。我应该在这里添加什么?谢谢。

1 个答案:

答案 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字段的值将为null,但我们无论如何都忽略它,因此这并不重要。

将您的数据文件定义为:

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