2017-03-08 101 views
0

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

我的表看起来像这样:

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

这里是我的CTL ADN 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命令机智ħparamters以上,我已收到错误消息:

SQL *装载机-350:Suntax误差在管线7

期待 “” 或 “)”,找到 “BFILENAME”。

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

    ^

我做得不对或SQL加载不接受BFILES?

谢谢

+0

对不起,我发布rhe wrror messege时发生的错误 – mikcutu

回答

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)) 

但隐式转换通常是OK了。

+0

解决方法是将行加载到表中,但是......它们似乎没有链接到硬盘的物理位置。当我浏览表格并尝试保存其中一个文件时,它给了我一个错误。 “显示java.lang.NullPointerException \t在oracle.dbtools.raptor.extendedtype.BFILEType.saveToDisk(BFILEType.java:106) \t在oracle.dbtools.raptor.controls.celleditor.ExtendedTypeEditPanel.saveToDisk(ExtendedTypeEditPanel.java: 398) \t在oracle.dbtools.raptor.controls.celleditor.BFileEditPanel.processExtendedType(BFileEditPanel.java:192) “ – mikcutu

+0

” \t在oracle.dbtools.raptor.controls.celleditor.ResultSetCellEditor.showExtendedTypeEdit(ResultSetCellEditor.java:299) \t at oracle.dbtools.raptor.controls.celleditor.ResultSetCellEditor.access $ 200(ResultSetCellEditor.java:52) \t at oracle.dbtools.raptor.c ontrols.celleditor.ResultSetCellEditor $ 1.actionPerformed(ResultSetCellEditor。Java的:140) \t在javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849) \t在javax.swing.AbstractButton中的$ Handler.actionPerformed(AbstractButton.java:2169) “ – mikcutu

+0

” \t在javax.swing.ButtonModel中.fireActionPerformed(DefaultButtonModel.java:420) \t在javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258) \t在javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) \t在java.awt.Component.processMouseEvent(Component.java:5517) \t at javax.swing.JComponent.processMouseEvent(JComponent.java:3135) \t在java.awt.Component.processEvent(Component.java:5282) \t在java.awt.Container.processEvent(Container.java:1966) \t在java.awt.Component.dispatchEventImpl(Component.java:3984) “ – mikcutu