使用存储过程将数据以XML格式导出到XML文件.doc_第1页
使用存储过程将数据以XML格式导出到XML文件.doc_第2页
使用存储过程将数据以XML格式导出到XML文件.doc_第3页
使用存储过程将数据以XML格式导出到XML文件.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

使用存储过程将数据以XML格式导出到XML文件文章分类:数据库 最近看到有网上有很多人问怎么把数据导出到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 iIN 1 . 100000 LOOP INSERT INTOxml_tableVALUES (i,/zhangchu_63); END LOOP; COMMIT; END; / 通过上面的操作,我们已经建立了一张名叫xml_table的表,并向里面插入了100000条数据。大家知道XML文件是导出到OS的,因此,需要在ORACLE中为文件创建一个路径: CREATEORREPLACE DIRECTORY D_OUTPUTAS 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,希望大家别学我,要养成良好的书写习惯。 为了方便大家学习,我把dbms_xslprocessor中用到的过程描述贴出来,供大家参考:CLOB2FILE ProcedureThis procedure writes content of a CLOB into a file.SyntaxDBMS_XSLPROCESSOR.CLOB2FILE( cl IN CLOB; flocation IN VARCHAR2, fname IN VARCHAR2, csid IN NUMBER:=0);ParameterDescriptionCLOB File directoryflocation File directoryfname File namecsid Character set id of the

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论