2011-08-24 200 views
1

我在我的oracle表中有一個CLOB數據類型的列。 如何在本專欄中存儲.txt文件,以及如何檢索相同的文件?在Oracle數據庫的CLOB字段中存儲文件

下面是表定義提前

+0

什麼太(s)和/或API(s)你用來插入和檢索數據?你在尋找PL/SQL解決方案嗎?使用SQL * Loader? JDBC?還有別的嗎? –

+0

我正在尋找PL/SQL解決方案 – acadia

+0

確定。並且您試圖加載的文件存在於數據庫服務器上,對不對? –

回答

5

文件加載到在PL/SQL中的CLOB

fileID Number 
logFile CLOB 

由於是相當easy--你只需要使用DBMS_LOB.LoadCLOBFromFile procedure

CREATE DIRECTORY file_dir 
    AS <<path on database server file system>>; 

GRANT read, write 
    ON file_dir 
    TO your_user_name; 

DECLARE 
    l_src_file bfile := BFileName('FILE_DIR', <<name of file>>); 
    l_dest_lob clob; 

    l_dest_offset integer := 1; 
    l_src_offset integer := 1; 
    l_lang_context number := dbms_lob.default_lang_ctx; 
    l_warning  number; 
BEGIN 
    dbms_lob.open(l_src_file, dbms_lob.lob_readonly); 

    INSERT INTO some_table(fileID, logFile) 
    VALUES(fileIDSeq.nextval, empty_clob()) 
    RETURNING logFile 
     INTO l_dest_lob; 

    dbms_lob.LoadCLOBFromFile( 
       dest_lob  => l_dest_lob, 
       src_bfile => l_src_file, 
       amount  => dbms_lob.getLength(l_src_file), 
       dest_offset => l_dest_offset, 
       src_offset => l_src_offset, 
       bfile_csid => dbms_lob.default_csid, 
       lang_context => l_lang_context, 
       warning  => l_warning); 

    dbms_lob.close(l_src_file); 
END; 
/

再次將文件從CLOB寫入文件系統有一點涉及。我會使用像湯姆凱特的東西clob_to_file procedure

+0

如果不解釋如何導出數據庫服務器文件系統的路徑,那麼不應該這麼說。「絕對不是」非常容易「。 –

+0

@PhilipRego - 我不知道你所說的「如何得到它」的意思。數據庫服務器文件系統上的''路徑>>'可以是你想要的任何路徑,沒有你需要派生的「魔術」路徑。它是您想要加載的文件在服務器的文件系統上的任何地方。 –

相關問題