oracle表中乙個字段內容匯出到磁碟上

2022-02-11 01:19:12 字數 1829 閱讀 1138

有沒有遇到過這樣的問題,

系統設計的時候,會把一些內容比較大的文字內容存入到表中(oracle longe型別最大可以存放2g的文字)

剛開始也許不會有什麼問題,但是時間長了,資料量大了,經常頻繁的insert,update之後,效率開始變低了,

而且備份也會有磁碟大小和備份耗時越來越長的問題。

現在要改變原先的設計

把文字內容匯出到乙個目錄中,每條記錄對應乙個檔案,檔名就使用該記錄的主鍵值,

這樣使用exp備份的時候就不要備份這些文字內容了

下面的儲存過程,使用oracle中內建程式包:utl_file

-- 使用管理員帳號 sys/password 以 sysdba身份登入

--建立要匯出檔案存放目錄

create

orreplace

directory etf as'

f:/exporthtml/';

/--注意 『f:/exporthtml/』 是指oracle伺服器上的磁碟目錄,非個人pc客戶端的磁碟目錄(使用pl/sql客戶端執行的使用者別錯了)

-- 授權

grant execute on utl_file to xyl;

grant read on directory etf to xyl;

--使用 xyl/password 登入繼續下面的操作

--建立匯出儲存過程

--使用主鍵值作為檔名稱

--selectsql: select id,html from mytable

create

orreplace

procedure

exporttofile(selectsql

varchar2

) as

v_file utl_file.file_type;

v_html

long

;

--匯出字段

v_id

varchar2(64

);

--主鍵值,檔名稱

type refcur_t

isref

cursor

;refcur refcur_t;

begin

--v_dir :='

etf'

;

--上面定義的目錄名稱

open

refcur

forselectsql;

--開啟游標

--迴圈游標提取資料

loop

fetch

refcur

into

v_id, v_html;

exit

when

refcur

%notfound;

--開啟檔案

v_file :

=utl_file.fopen('etf', v_id||'

.html',

'w');

--寫入

utl_file.put(v_file,v_html);

--關閉

utl_file.fclose(v_file);

/**/

endloop;

close

refcur;

--關閉游標

exception

when

others

then

ifutl_file.is_open(v_file)

then

utl_file.fclose(v_file);

endif

;end;/

redis 中乙個字段 修改map redis原理

redis單點吞吐量 單點tps達到8萬 秒,qps達到10萬 秒。redis的5中儲存型別 string list set map hash stored set redis的string型別 能表達3中型別 字串 整數和浮點數。根據場景相互間自動轉型,並且根據需要選取底層的承載方式 value內...

oracle分組後合併其中乙個字段 (2)

1 select wmsys.wm concat t.org orgs,t.area name from select concat concat b.abbreviation,b.org name org,a.area name area name from t organization b le...

oracle批量更新乙個表中的乙個字段

最近遇到乙個sql問題。老大們讓我把乙個表中的一列資料做更新。更新的內容和對照表有給提供。後來仔細檢視資料 總結出這樣的sql 語句。update 更新表 b set b.需要更新的字段 select a.參考更新字段 from 對照表 a where a.對照表舊欄位 b.更新表需要更新的字段 注...