通过SQL Loader加载bfile

时间:2017-03-08 14:32:50

标签: oracle sql-loader bfile

我正在尝试将值加载到一个表中,其中一列是使用SQL Loader的BFILE。

我的表格如下:

create table documents 
    ( id number primary key
    , text bfile)

以下是我的CTL和DAT文件:

loader.ctl

load data
infile d':\test\loader.dat'
into table documents
replace
fields terminated by ';'
    ( id integer
    , text bfilename('MY_DIRECTORY', 'my_file.txt') terminated by eof)

loader.dat

3;my_file.txt

当我使用上面的参数执行sqlldr命令时,收到错误消息:

  

SQL * Loader-350:第7行的Suntax错误。

     

期待","或")",找到" bfilename"。

    , text bfilename('MY_DIRECTORY', 'my_file.txt') terminated by eof)

    ^

我做错了什么或SQL Loader不接受BFILE?

谢谢,

1 个答案:

答案 0 :(得分:1)

文档有a section on loading BFILE columns

您需要有一个填充列,表示数据文件中的文件名字段,然后在bfile() - 而不是bfilename() - 字段定义中引用该填充字段名称:

load data
infile d:\test\loader.dat
into table documents
replace
fields terminated by ';'
    ( id
    , filename filler
    , text bfile(constant 'MY_DIRECTORY', filename) )

您不希望将ID字段声明为integer; this is a full-word binary integer,您可能无法获得表格列中的预期值。

如果您想明确转换为数字,您可以这样做:

...
fields terminated by ';'
    ( id "to_number(:id)"
    , filename filler
    , text bfile(constant 'MY_DIRECTORY', filename) )

但隐式转换通常也可以。