使用儲存過程將資料以XML格式匯出到XML檔案

2021-08-30 18:42:44 字數 3148 閱讀 8931

最近看到有網上有很多人問怎麼把資料匯出到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 aclobinto 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這條語句查詢出結果,這樣記錄是按省市鄉鎮依次排列的,...