2012-02-22 65 views
1

我使用sQLLDER(11g)將數據加載到表中。其中一列是一個BLOB,需要從另一個文件加載。該文件的名稱取決於表的一個字段,我需要連接完整路徑才能加載文件。因此,爲了獲得文件的完整路徑,我需要將文件夾路徑'/ oradata/val /'與ID_RECOMMENDATION字段以及擴展名'.dat'連接起來;例如,如果字段ID_RECOMMENDATION是'1',則文件名應該是'/oradata/val/1.dat'。我不能修改原始文件,所以我想用一個表達式來獲得該文件的完整路徑,使用這樣的事情:SQLLDR:連接完整路徑和文件名的lobfile動態加載

LOAD DATA 
INFILE * 
INTO TABLE t_val_recommendation append 
fields terminated by ';' 
(
    ID_RECOMMENDATION, 
    ID_PROFILE  , 
    START_DATE  date 'yyyymmdd', 
    LOBF_00001  BOUNDFILLER"trim('/oradata/val/'||:ID_RECOMMENDATION||'.dat')", 
    PARAGRAPHS  LOBFILE (LOBF_00001) TERMINATED BY EOF, 
    ASSET_ALLOCATION 
) 

但它似乎並不理解路徑的級聯和文件名。我怎樣才能做到這一點?

感謝

(編輯澄清的意思)

這是表模式:

ID_RECOMMENDATION NUMBER(10)     NOT NULL,    
    ID_PROFILE   VARCHAR2(10 BYTE)   NOT NULL, 
    START_DATE   DATE      NOT NULL, 
    PARAGRAPHS   SYS.XMLTYPE, 
    ASSET_ALLOCATION SYS.XMLTYPE 

,這將是要加載的行:

1;CONSERVATIVE;20120301;<aa>This is my asset allocation</aa> 
+0

它看起來像你試圖跳過加載列「LOBF_00001」,但你想以後使用它,對吧? – 2012-02-29 15:35:11

+0

不完全。我想加載文件夾/ oradata/val中的xml文件,名稱是記錄的IF_RECOMMENDATION字段。我希望能夠連接路徑和文件名,並將其加載到字段中。PARAGRAPHS – 2012-02-29 19:09:01

+0

您可以在BEGINDATA行之後添加表格模式PLUS的CTL樣本行,以便我們知道數據映射的哪個字段到數據庫中的哪一列 – Benoit 2012-03-01 14:22:43

回答

0

我我不確定要修改正在加載的現有文件是多麼困難,但是是否有可能修改這些文件以包含正確的文件路徑?您可以使用Java或其他文本處理語言將ID_RECOMMENDATION與'/ oradata/val /'.dat'連接並保存文件,然後這將是一個簡單的更改以加載文件(s )...使用...

LOAD DATA 
INFILE * 
INTO TABLE t_val_recommendation append 
fields terminated by ';' 
(
    ID_RECOMMENDATION, 
    ID_PROFILE  , 
    START_DATE  date 'yyyymmdd', 
    LOBF_00001  FILLER char, 
    PARAGRAPHS  LOBFILE (LOBF_00001) TERMINATED BY EOF 
) 

有許多語言易於學習和做文本文件轉換。 Java,Perl & C#是三個可以正確使用的C#,但也有很多其他可用的。

我會說設置您的文本文件的格式,將易於使用的SQLLDR將是非常值得的長期努力。

+0

我知道這一點。我希望有其他的方式來做到這一點,因爲同一個文件需要加載到其他服務器上,其中的路徑將會改變。我只是不明白爲什麼可以在任何普通領域進行這樣的操作,而不是在FILLER領域。這有點荒謬。 – 2012-03-01 08:03:24

0
LOBF_00001  BOUNDFILLER"trim('/oradata/val/'||:ID_RECOMMENDATION||'.dat')" 

這似乎是一個錯誤,對我說:

  • 如果這是一個BOUNDFILLER,這意味着有NO在表t_val_recommendation命名爲LOBF_00001列,但有你的數據資料ctl文件的一部分,您要使用它並將其存儲到LOBF_00001變量中,該變量可用於計算其他表達式。
  • 如果這是一個EXPRESSION,就意味着有在你的桌子t_val_recommendation命名爲LOBF_00001一列,但存在的CTL文件的數據部分NO數據。
+0

我編輯了這個問題來澄清我的問題。 – 2012-03-01 14:12:40