最近看到有網上有很多人問怎麼把資料匯出到xml檔案,大多的解決方法就是 dbms_xmlgen+utl_file,首先要說的是,這種方法確實不錯,但是有些缺點。如果系統中需要把資料匯出xml檔案,通常資料量都比較大, 因此,對於大資料量的匯出,utl_file就顯得比較蒼白了。而且dbms_xmlgen獲得資料本身就是有格式的,因此utl_file的instr 就顯得有些多餘了。但是,我還要把這個方法記錄下來,另外,還有乙個是使用dbms_xslprocessor包的方法。
一、準備工作
準備資料:
create table xml_table(id varchar2(20),
object_value varchar2(200));
匯入資料:
begin
for i in 1 .. 100000 loop
insert into xml_table values (i,'blog.csdn.net/zhangchu_63');
end loop;
commit;
end; /
通過上面的操作,我們已經建立了一張名叫xml_table的表,並向裡面插入了100000條資料。大家知道xml檔案是匯出到os的,因此,需要在oracle中為檔案建立乙個路徑:
create or replace directory d_output as 'd:\temp';
下面是我們就要開始嘍。
二、開始幹活
1、dbms_xmlgen+utl_file方式
create or replace procedure xml_output is
/**本儲存過程使用dbms_xmlgen+utl_file兩個包來完成資料匯出到xml*/
xml_ctx dbms_xmlgen.ctxtype;
v_file utl_file.file_type;
xml_txt varchar2(4000);
line varchar2(500);
begin
xml_ctx := dbms_xmlgen.newcontext('select * from xml_table order by
id');
dbms_xmlgen.setrowsettag(xml_ctx,'dbms');
dbms_xmlgen.setrowtag(xml_ctx,'xml_table');
xml_txt := dbms_xmlgen.getxml(xml_ctx);
v_file := utl_file.fopen('xml_output','test.xml','w');
loop
line := substr(xml_txt,1,instr(xml_txt,chr(10))-1);
utl_file.put_line(v_file,line);
exit when instr(line,'')>0;
xml_txt := substr(xml_txt,instr(xml_txt,chr(10))+1);
end loop;
dbms_xmlgen.closecontext(xml_ctx);
utl_file.fclose(v_file);
end xml_output ;
上面就是使用dbms_xmlgen+utl_file方式匯出xml的,我的儲存過程是沒有引數的,如果大家需要可以自己加。
2、dbms_xmlgen+dbms_xslprocessor方式
create or replace procedure xml_print is
/**本儲存過程使用dbms_xmlgen+dbms_xslprocessor兩個包
來完成資料匯出到xml*/
xml_ctx dbms_xmlgen.ctxtype;
xml_txt clob;
begin
xml_ctx := dbms_xmlgen.newcontext('select * from xml_table
order by id');
dbms_xmlgen.setrowsettag(xml_ctx,'dbms');
dbms_xmlgen.setrowtag(xml_ctx,'xml_table');
xml_txt := to_clob(dbms_xmlgen.getxml(xml_ctx));
dbms_xslprocessor.clob2file
(xml_txt,'xml_output','test.xml');
dbms_xmlgen.closecontext(xml_ctx);
end xml_print;
這個好處就是它不管xml_txt的格式,直接把所有資料寫入test.xml中。
三、方法比較
dbms_xmlgen+utl_file方式:匯出100000條資料,2分鐘沒導完,我沒耐
心等了。
dbms_xmlgen+dbms_xslprocessor方式:匯出100000條資料用了
10秒鐘。
四、總結
看了上面我寫的過程和比較,不用我說,大家也都知道怎麼選了吧。在這裡我還是要說,沒有最好的辦法,只有最合適的辦法,根據具體問題具體對待。
注:我上面的過程是為了簡便,所以沒有注釋,沒有exception,希望大家別學我,要養成良好的書寫習慣。
this procedure writes content of aclob
into a file.
syntax
dbms_xslprocessor.clob2file(cl in clob;
flocation in varchar2,
fname in varchar2,
csid in number:=0);
parameter
description
clob
file directory
flocation
file directory
fname
file name
csid
character set id of the file
怎麼將資料儲存成XML格式的例子
protected string strxmlfile protected xmldocument objxmldoc new xmldocument public xmlcontrol string xmlfile catch system.exception ex strxmlfile xmlf...
將資料分頁的儲存過程
過程1 create procedure sp page tb varchar 50 表名 col varchar 50 按該列來進行分頁 coltype int,col 列的型別,0 數字型別,1 字元型別,2 日期時間型別 orderby bit,排序,0 順序,1 倒序 collist var...
c 將資料匯出成指定xml格式
dataset的writexml是按記錄一條一條的寫成xml,對應的,不可能給你寫成分省市的,必須要自己寫迴圈判斷,自己構造xml 用select from tablename order by province,city,country,town這條語句查詢出結果,這樣記錄是按省市鄉鎮依次排列的,...