使用存储过程将数据以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 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);
Parameter | Description |
---|---|
|
File directory |
|
File directory |
|
File name |
|
Character set id of the file
|
使用存储过程将数据以XML格式导出到XML文件相关推荐
- 使用layui把数据以Excel格式导出
昨天领导让我给页面加一个数据导出, 开始我以为是本页导出,我就加一个layui自带的,结果告诉我不行,要导出所有的数据,而且不是页面展示的那个表格的,我就试试 引入layui的JS和CSS就不说了直接 ...
- Matlab 2018a与SolidWorks联合仿真——如何将SolidWorks模型以xml格式导出至Matlab中
Matlab 2018a与SolidWorks联合仿真--如何将SolidWorks模型以xml格式导出至Matlab中 要实现Solidworks与Matlab的联合仿真,需要在Solidwor ...
- 【邮件发送】将list数据以html格式的形式展示到邮件正文
签名:但行好事,莫问前程. 文章目录 前言 一.需求分析 二.代码编写 三.解决思路 四.最终效果 总结 前言 公司产品提出了一个新需求,要求把不满足团购商品利润和库存的Excel里面的数据展示到邮件 ...
- 将Java对象序列化成XML格式,将XML反序列化还原为Java对象
摘要:将Java对象序列化成XML格式,将XML反序列化还原为Java对象. 一:创建Maven工程,引入xstream依赖: <!--xstream--><dependency&g ...
- C# 将字符串(符合xml格式)与XML互转
转自https://blog.csdn.net/u011555996/article/details/53307830 //xml 转 string System.Xml.XmlDocument do ...
- python 解析xml格式_Python解析XML文件
1.概述 Python有三种方法解析XML:SAX,DOM,以及ElementTree: 1.SAX (simple API for XML ) python 标准库包含SAX解析器,SAX用事件驱动 ...
- python爬取数据保存为csv时生成编号_将爬取到到数据以CSV格式存储
CSV文件存储 CSV,全称为Comma-Separated Values,中文可以叫做逗号分隔值或字符分隔值,其文件以纯文本形式存储表格数据.该文件是一个字符序列,可以由任意数目的记录组成,记录间以 ...
- Python爬虫爬取数据以Json格式保存并解决中文乱码问题
爬取网站的前端源码: Python代码: import requests from bs4 import BeautifulSoup import jsontarget = 'http://www.h ...
- node爬取app数据_node爬取拉勾网数据并导出为excel文件
前言 之前断断续续学习了node.js,今天就拿拉勾网练练手,顺便通过数据了解了解最近的招聘行情哈!node方面算是萌新一个吧,希望可以和大家共同学习和进步. 一.概要 我们首先需要明确具体的需求: ...
最新文章
- 在.net中运用HTMLParser解析网页的原理和方法
- 不好意思,我真的不知道MySQL的窗口函数...
- 散列函数的应用及其安全性
- lua 从一串数字中取出偶数位的数字_为什么JavaScript中 0.1 0.2 不等于0.3?
- HDU 2874 Connections between cities(LCA离线算法实现)
- python学习笔记2018-9-18
- 别人的1024程序员节VS你的1024程序员节
- Mac小知识:只需四步,教大家如何修改苹果电脑的DNS
- LeetCode刷刷记录
- Twitter数据非API采集方法
- 将VMware迁移到阿里云分几步?!
- mysql管理工具-SQLyog管理工具
- 十四代装系统前RAID配置
- 雷电4模拟器安装xposed框架(2022年)
- 微软输入法数字有间隔_Word 2016中使用微软拼音输入法,换行后输入数字、标点时会没有输入进去,需要再输入一次...
- 弘辽科技:多多进宝怎么找团长?多多进宝怎么找推手推广?
- matlab postscript,Postscript软件特点全面解析
- 研究google搜索框代码
- 藏宝阁显示角色可买服务器,梦幻西游:刚买角色的藏宝阁上居然有东西,客服说是原号主出售的...
- 如何获取网页真实地址