使用存储过程将数据以XML格式导出到XML文件
更新时间:2023-11-15 02:41:01 阅读量: 教育文库 文档下载
- 使用存储过程添加数据推荐度:
- 相关推荐
使用存储过程将数据以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,'')>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 CLOB File directory flocation File directory fname csid File name Character set id of the file ? ? Must be a valid Oracle id; otherwise returns an error If 0 , content of the output file will be in the database character set
正在阅读:
基础会计期末复习试卷总论(含答案)06-03
2013-2017惩防体系建设工作方案01-21
创业管理学案例分析06-13
精馏12-15
岳麓区中小学、幼儿园教师培训学分登记管理实施细则(2015年修订)06-27
帮外公按摩作文450字07-08
仿真大作业05-29
日益网—你需要知道的P2P网贷投资常识03-09
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 据以
- 导出
- XML
- 存储
- 过程
- 格式
- 文件
- 使用
- 中石化安全生产十大禁令
- 生死场写作结构和人物特点
- 烟草物流师4级技能复习题1(下发版) - 图文
- 夜总会KTV管理营销策划
- 高中化学生活化教学研究
- 第11章 免疫遗传学
- 《语文园地五》教学设计
- 长沙理工大学马原1000道机考题库
- 大理州2018年中考物理猜题卷及答案
- 西安交通大学电气学院 机械工程基础 考试题2
- 人教版高中数学必修三 第二章 统计“ 简单随机抽样”教学设计
- 机械制图-识读零件图-22题(答案)
- 动态规划练习题及解答1
- 竣工财务决算审计实施办法
- 中泰关系发展中的一个亮点
- 新时代新担当新作为党员干部要做到知责思为担责敢为尽责有为党课讲稿范文
- 2019高中语文 第一单元 2 想北平检测 粤教版选修《中国现代散文选读》
- E08 连续搅拌釜反应器中乙酸乙酯的水解反应 - 图文
- 2005高考语文--高考作文满分60招--高考作文结构创新招术之三十 悬念解疑法
- 2015-2016学年高中历史 第二单元 凡尔赛—华盛顿体系下的世界 第3课 华盛顿会议练习