有沒有遇到過這樣的問題,
系統設計的時候,會把一些內容比較大的常值內容存入到表中(oracle longe類型最大可以存放2G的文本)
剛開始也許不會有什麼問題,但是時間長了,資料量大了,經常頻繁的insert,update之後,效率開始變低了,
而且備份也會有磁碟大小和備份耗時越來越長的問題。
現在要改變原先的設計
把常值內容匯出到一個目錄中,每條記錄對應一個檔案,檔案名稱就使用該記錄的主索引值,
這樣使用exp備份的時候就不要備份這些常值內容了
下面的預存程序,使用Oracle中內建程式包:utl_file
--建立要匯出檔案存放目錄
create or replace directory ETF AS
'f:/exportHTML/';
/
--建立匯出預存程序
--使用主索引值作為檔案名稱
--selectSQL: select id,html from mytable
create or replace procedure exportToFile(selectSQL varchar2) as
v_file utl_file.file_type;
v_html long; --匯出欄位
v_id varchar2(64); --主索引值,檔案名稱
type refcur_t is ref cursor;
refcur refcur_t;
begin
v_dir := 'ETF'; --上面定義的目錄名稱
open refcur for selectSQL; --開啟遊標
--迴圈遊標提取資料
loop
fetch refcur
into v_id, v_html;
exit when refcur%notfound;
--開啟檔案
v_file := utl_file.fopen(v_dir, v_id||'.html', 'w');
--寫入
utl_file.put(v_file,v_html);
--關閉
utl_file.fclose(v_file);
/**/
end loop;
close refcur; --關閉遊標
EXCEPTION
when others then
if utl_file.is_open(v_file) then
utl_file.fclose(v_file);
end if;
end;
/