//先建立表 lob_example1 create table lob_example1( id number(6) primary key, name varchar2(10), resume clob ); //插入資料 insert into lob_example1 values(1,'豬',empty_clob()); insert into lob_example1 values(2,'狗',empty_clob()); commit; //建立目錄,儲存在c盤根目錄 CREATE OR REPLACE DIRECTORY DOCS AS 'C:'; //建立將檔案內容寫入資料庫CLOB的預存程序 CREATE OR REPLACE PROCEDURE update_doc( t_id number, filename varchar2 ) as lobloc clob; fileloc bfile; amount int; src_offset int:=1; dest_offset int:=1; csid int:=0; lc int:=0; warning int; begin fileloc:=bfilename('DOCS',filename); dbms_lob.fileopen(fileloc,0); amount:=dbms_lob.getlength(fileloc); select resume into lobloc from lob_example1 where id=t_id for update; dbms_lob.loadclobfromfile(lobloc,fileloc,amount,dest_offset,src_offset,csid,lc,warning); dbms_lob.fileclose(fileloc); commit; end; //調用預存程序,把檔案讀入資料庫CLOB中,c盤下要有這兩個檔案 call update_doc(1,'aa.csv'); call update_doc(2,'bb.csv'); //察看id是2和1的行中檔案大小 select length(resume) from lob_example1 where id=2; select length(resume) from lob_example1 where id=1; /////////////////////////////////////////////////////檔案已經放入資料庫 //將檔案從資料庫clob中讀出來 CREATE OR REPLACE PROCEDURE get_doc( t_id number, filename varchar2 ) as lobloc clob; amount int; offset int:=1; buffer varchar2(2000); handle utl_file.file_type; begin select resume into lobloc from lob_example1 where id=t_id; amount:=dbms_lob.getlength(lobloc); dbms_lob.read(lobloc,amount,offset,buffer); handle:=utl_file.fopen('DOCS',filename,'w',2000); utl_file.put_line(handle,buffer); utl_file.fclose(handle); end; / //調用這個過程,把檔案讀出來 call get_doc(1,'zz.csv'); |