最近看到有网上有很多人问怎么把数据导出到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,'</DBMS>')>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 Procedure
This procedure writes content of a CLOB
into a file.
Syntax
DBMS_XSLPROCESSOR.CLOB2FILE(
cl IN CLOB;
flocation IN VARCHAR2,
fname IN VARCHAR2,
csid IN NUMBER:=0);
分享到:
相关推荐
标题“Kettle数据导出为XML文件”涉及的是使用Pentaho Data Integration(通常称为Kettle或ETL工具)将数据转换并导出为XML格式的过程。Kettle是一款开源的数据集成工具,它允许用户通过图形化界面设计数据处理流程...
在C#编程中,将List数据导出到XML文件是一个常见的任务,特别是在处理数据存储、交换或序列化时。XML因其结构清晰、易于解析和跨平台兼容性而被广泛使用。下面我们将详细讨论如何实现这一功能,以及相关的重要知识点...
对于导出XML文件,Java提供了`Transformer`和`TransformerFactory`类来将DOM树转换为XML字符串或直接写入文件。首先创建`TransformerFactory`,然后使用`newTransformer()`创建`Transformer`实例,最后调用`...
将数据库数据转换为XML文件是一项常用的任务,它涉及到数据库查询、数据转换和文件格式设计等多个环节。理解这些知识点有助于你在项目中有效地实现数据交换和存储,提高系统的互操作性和灵活性。
导出则是相反的过程,将本地存储的密钥转换成XML格式,以便在其他地方使用。 4. **密钥存储与管理**:为了确保密钥的安全,它们通常被存储在受保护的密钥库或硬件安全模块(HSM)中。XML格式使得这些密钥可以方便地...
在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 框架与XML库,如TinyXML2,来实现保存控件数据至XML文件以及从XML文件中读取数据回控件的功能。这对于创建应用程序配置文件或者保存用户自定义...
4. **转换为XML**:在FragMotion中,找到将场景数据导出为XML的选项,这可能在“文件”>“导出”或“保存为”菜单下。按照提示设置导出选项,如选择XML作为目标格式,设置保存路径等。 5. **确认导出**:导出完成后...
本篇文章将详细讲解如何将XML文件导出为本地的Excel文件,这一过程涉及到数据解析、格式转换以及文件操作等多个关键知识点。 首先,我们需要了解XML的基本结构。XML文件由元素(Elements)、属性(Attributes)、...
本示例中的“VB导入导出XML文件”可能是通过VB编写的一个程序,该程序实现了从XML文件中读取数据并显示在一个网格(如DataGridView)中,同时也能将用户在网格中的修改保存回XML文件。这样的功能对于数据管理、配置...
本文将深入探讨如何使用XML方式在C#中导出Excel,以解决在处理大量数据时可能出现的问题,比如使用Microsoft.Office.Interop.Excel库可能导致的性能瓶颈。 首先,让我们了解XML(可扩展标记语言)的背景。XML是一种...
在这个项目中,它被用来显示和修改XML文件的内容,并且能够将修改后的数据导出。以下是这个项目涉及到的关键知识点: 1. **QT框架**:QT是一个跨平台的应用程序开发框架,由C++编写,提供了丰富的图形用户界面(GUI...
首先,数据表导出为XML的过程涉及将数据库中的表格数据转换成XML格式的文件。这通常通过读取数据库中的数据,然后使用C#的System.Xml命名空间下的类,如XmlWriter,来创建XML文档结构。开发者可以自定义XML元素的...
MySQL 数据表导出生成 XML 文件是一项常见的数据转换任务,它允许我们把数据库中的结构化数据转化为一种便于交换和处理的格式。XML(eXtensible Markup Language)是一种标记语言,常用于存储、传输和表示数据,尤其...
本教程将详细介绍如何使用Java进行XML数据的导入和导出,并与MySQL数据库进行操作。 首先,导入XML数据到MySQL数据库通常涉及以下步骤: 1. **解析XML文件**:Java提供了多种解析器来读取XML文件,如DOM(Document...
在Qt框架中,XML文件是一种常见的数据存储格式,它提供了结构化的数据表示方式,便于程序读取和写入。QTreeWidget是Qt提供的一种用于显示树状结构数据的控件,它可以很好地展示XML文件的层次结构。QXml是Qt中的XML...
通过Qt的XML模块,我们可以方便地读取XML文件,将其内容加载到QTreeWidget中展示,同时也能将QTreeWidget中的数据导出并保存为XML文件。此外,我们还将讨论QTreeWidget项的拖放功能,使得用户可以更加直观地操作数据...
在数据库数据导出到XML的过程中,我们需要反向操作:查询数据库,将结果集转换为XML格式。这可以通过遍历结果集,逐条构建XML元素来完成。JDOM可以很方便地帮助我们创建XML结构,而`Transformer`则负责将这个结构...
- 使用`bcp`命令来创建格式文件,再使用`FOR XML AUTO`来生成XML数据,并最终通过`bcp`命令将XML数据导出到指定路径。 ```sql declare cur cursor for select tblname from #temp open cur fetch next from ...
本文详细介绍了如何使用ASP.NET和C#结合ADO.NET技术将数据集中的数据导出为XML格式,以及如何从XML文件中导入数据。通过设置`DataSet`的相关属性,可以自定义XML文档的结构和内容。此外,还讨论了如何处理包含关系的...