在Oracle DB的CLOB字段中存储文件

时间:2011-08-24 03:06:47

标签: plsql oracle10g

我的oracle表中有一个CLOB数据类型的列。 如何在此列中存储.txt文件以及如何检索同一文件?

以下是表格定义

fileID  Number
logFile CLOB

提前致谢

1 个答案:

答案 0 :(得分:6)

将文件加载到PL / SQL中的CLOB非常简单 - 只需使用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再次写入文件系统需要更多参与。我会使用Tom Kyte的clob_to_file procedure

之类的东西