解決dbms_lob.loadfromfile載入lob資料後出現亂碼的問題
今天接到個需求,要將一個文字檔案的內容給載入到某個表的clob欄位中,之前對lob瞭解很少,不過在tom的expert-one-on-one中介紹了可以透過如下儲存過程來實現這個功能。
declare
a_clob clob;
a_warn integer;
bfile_name bfile :=bfilename('FILE_DUMP','3.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;
/
a_clob clob;
a_warn integer;
bfile_name bfile :=bfilename('FILE_DUMP','3.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包裡的loadfromfile過程不支援變長的字符集,比如GBK,UTF8等。解決方法的可以使用dbms_lob包裡的另外一個過程loadclobfromfile過程,因為此過程中有個引數叫BFILE_CSID,這個引數可以用來指定bfile檔案使用的字符集編碼。使用方法如下:
declare
v_clob clob;
bfil bfile :=bfilename('FILE_DUMP','3.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(bfil);
DBMS_LOB.LOADCLOBFROMFILE(v_clob,bfil,DBMS_LOB.LOBMAXSIZE,dest_offset,source_offset,src_csid,lang_ctx,warn);
dbms_lob.fileclose(bfil);
commit;
end;
/
v_clob clob;
bfil bfile :=bfilename('FILE_DUMP','3.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(bfil);
DBMS_LOB.LOADCLOBFROMFILE(v_clob,bfil,DBMS_LOB.LOBMAXSIZE,dest_offset,source_offset,src_csid,lang_ctx,warn);
dbms_lob.fileclose(bfil);
commit;
end;
/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20801486/viewspace-745243/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL匯入資料亂碼、出錯等問題的解決辦法MySql
- 使用Kettle抽取資料時,出現中文亂碼問題解決方案
- Kettle資料抽取(轉換)mysql出現亂碼問題解決方法MySql
- 解決Excel資料匯入sqlite中的中文亂碼問題ExcelSQLite
- MySQL資料匯入匯出亂碼問題MySql
- MYSQL資料庫匯入資料時出現亂碼的解決辦法MySql資料庫
- cat 輸出亂碼問題解決
- 解決Mysql匯入亂碼問題MySql
- MySql中表單輸入資料出現中文亂碼的解決方法MySql
- SqlServer資料庫中文亂碼問題解決SQLServer資料庫
- 表單傳值出現亂碼問題解決方案
- impdp匯入XMLTYPE欄位型別的資料出現亂碼的問題XML型別
- JQuery Easyui引入easyui-lang-zh_CN.js後出現亂碼的問題解決方法jQueryUIJS
- BW資料匯入亂碼問題
- oracle 輸出中文亂碼問題解決方案Oracle
- sqlldr 匯入中文出現亂碼解決方法SQL
- 解決SSH亂碼問題
- 解決中文亂碼問題
- Mac操作指南:如何解決下載檔名出現亂碼問題?Mac
- 解決 plsql 遇到亂碼的問題SQL
- oracle字元亂碼問題的解決Oracle字元
- 解決Flex裡的亂碼問題Flex
- 解決Charles手機抓包出現unknown和亂碼的問題
- 解決pl/sql developer中資料庫插入資料亂碼問題SQLDeveloper資料庫
- SSM解決中文存入資料庫亂碼問題(記錄自己的問題)SSM資料庫
- MySql中文亂碼問題解決MySql
- Jmeter 解決中文亂碼問題JMeter
- Java 解決中文亂碼問題Java
- RDSSQLSERVER解決中文亂碼問題SQLServer
- 解決MySQL中文亂碼問題MySql
- MYSQL亂碼問題解決方法MySql
- Python:Python中文寫入csv檔案出現亂碼問題的解決方案之一Python
- maven下載原始碼,解決中文註釋為亂碼的問題Maven原始碼
- Windows 伺服器中使用 mysqldump 命令匯出資料,解決中文亂碼問題Windows伺服器MySql
- [轉]Linux系統出現亂碼問題的終極解決方法(轉)Linux
- 深度揭祕亂碼問題背後的原因及解決方式
- 解決confluence的亂碼問題
- DES加密中文亂碼問題的解決加密