2017-03-08 147 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