在資料庫運維中,偶爾會碰到需要手動修改lob欄位的情況。對於大物件的處理,
並不能直接用update或者insert普通dml操作。通過查詢並測試,確認下面方法可行,
並且不會產生亂碼。
(僅供參考)
######sql處理lob欄位資料#######
--資料庫伺服器上建立目錄,或者使用現有目錄
create directory dump_dir as '/data/dump_dir'
--將待處理檔案如lob.txt上傳到directory目錄
--測試表
create table clobtest(col1 clob);
--使用dbms_lob.loadfromfile,這個方法網上很多例子,但是實際使用時會產生亂碼。
declare
a_clob clob;
bfile_name bfile := bfilename('dump_dir','lob.txt');
begin
insert into clobtest values (empty_clob()) returning col1 into a_clob;
dbms_lob.fileopen(bfile_name);
dbms_lob.loadfromfile(a_clob, bfile_name, dbms_lob.getlength(bfile_name));
dbms_lob.fileclose(bfile_name);
commit;
end;
/--使用dbms_lob.loadclobfromfile插入clob字段值正常
declare
v_clob clob;
bfile_name bfile := bfilename('dump_dir','lob.txt');
dest_offset number :=1;
source_offset number :=1;
src_csid number :=nls_charset_id('utf8');
lang_ctx integer :=dbms_lob.default_lang_ctx;
warn integer;
begin
insert into clobtest values (empty_clob()) returning col1 into v_clob;
dbms_lob.fileopen(bfile_name);
dbms_lob.loadclobfromfile(v_clob,bfile_name,dbms_lob.lobmaxsize,dest_offset,source_offset,src_csid,lang_ctx,warn);
dbms_lob.fileclose(bfile_name);
commit;
end;
/--update clob 使用dbms_lob.loadclobfromfile更新clob字段值正常
declare
v_clob clob;
bfile_name bfile := bfilename('dump_dir','lob.txt');
dest_offset number :=1;
source_offset number :=1;
src_csid number :=nls_charset_id('utf8');
lang_ctx integer :=dbms_lob.default_lang_ctx;
warn integer;
begin
update clobtest set col1=empty_clob() where rownum=1 returning col1 into v_clob;
dbms_lob.fileopen(bfile_name);
dbms_lob.loadclobfromfile(v_clob,bfile_name,dbms_lob.lobmaxsize,dest_offset,source_offset,src_csid,lang_ctx,warn);
dbms_lob.fileclose(bfile_name);
commit;
end;
/
通過SQL語句實現要素Geometry欄位解析
在系統應用中,為了獲取要素幾何欄位的點值集合,我們以前經常會想到用arcengine來進行開發解析,這裡介紹一種更快捷的方式,通過sde提供的資料庫st函式,利用sql語句直接解析。1 配置oracle外接函式庫 如果要在oracle中執行st函式,首先必須配置以下內容。a 配置oracleextp...
通過SQL語句實現要素Geometry欄位解析
通過sql語句實現要素geometry欄位解析 在系統應用中,為了獲取要素幾何欄位的點值集合,我們以前經常會想到用arcengine來進行開發解析,這裡介紹一種更快捷的方式,通過sde提供的資料庫st函式,利用sql語句直接解析。1 配置oracle外接函式庫 如果要在oracle中執行st函式,首...
通過Excel生成批量SQL語句,處理大量資料
我們經常會遇到這樣的要求 使用者給發過來一些資料,要我們直接給存放到資料庫裡面,有的是insert,有的是update等等,少量的資料我們可以採取最原始的辦法,也就是在sql裡面用insert into來實現,但是如果有幾十條幾百條甚至上千條資料的時候繼續寫單獨的sql語句的話那就慘了,其實有兩種簡...