`
jiaoronggui
  • 浏览: 1304247 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
博客专栏
B7c2eb31-a8ea-3973-a517-d00141f39b89
项目管理软件-redmin...
浏览量:115279
4a63e153-250f-30f6-a051-97cfc67cb3d3
IT职业规划
浏览量:197758
社区版块
存档分类
最新评论

oracle存储过程直接将查询结果保存为XML

阅读更多

是别人写的存储过程,但是第一次执行执行不了,原来是第一步没有设置导致的,故将过程写出来与各位共享
第一步  CREATE OR REPLACE DIRECTORY UTL_FILE_DIR as 'k:\datafile';--保存xml文件的目录

 

--'k:\datafile'是你本地的文件目录,必须存在,这一步必须要你登陆的oracle用户具有create DIRECTORY 权限,如果没有这个权限,请申请管理员添加该权限。


第二部 生成测试表
create table PEOPLE
(
  PERSONID VARCHAR2(114) not null,
  NAME     VARCHAR2(150),
  ADDRESS  VARCHAR2(200),
  TEL      VARCHAR2(50),
  FAX      VARCHAR2(50),
  EMAIL    VARCHAR2(100)
)
第三部 存储过程
CREATE OR REPLACE PROCEDURE OUTPUTPEOPLE(sqlStr VARCHAR2,file_path VARCHAR2)
 AS
     personRow PEOPLE%ROWTYPE;      --获取游标的行变量
     TYPE person_cur IS REF CURSOR; --自定义REF游标
     cur person_cur;
     tempSql varchar2(500) := 'SELECT * FROM PEOPLE ';       --初始的查询语句
     doc xmlDom.DOMDocument := xmldom.newDOMDocument;        -- 创建文档对象
     main_node xmlDom.DOMNode := xmldom.makeNode(doc);       -- 获得文档节点
     root_elmt xmlDom.DOMElement:= xmldom.createElement(doc, 'PEOPLE');   -- 创建根元素
     --==================================================
     --以下定义元素
     person_elmt xmlDom.DOMElement;      --定义PERSON元素
     name_elmt xmlDom.DOMElement;      --定义NAME元素
     address_elmt xmlDom.DOMElement;      --定义ADDRESS元素
     tel_elmt xmlDom.DOMElement;           --定义TEL元素
     email_elmt xmlDom.DOMElement;      --定义EMAIL元素
     --==================================================
     --以下定义节点
     root_node xmlDom.DOMNode;   --定义PEOPLE节点
     person_node xmlDom.DOMNode;   --定义PERSON节点
     name_node xmlDom.DOMNode;   --定义NAME节点
     address_node xmlDom.DOMNode;   --定义ADDRESS节点
     tel_node xmlDom.DOMNode;   --定义TEL节点
     email_node xmlDom.DOMNode;   --定义EMAIL节点
     temp_node xmlDom.DOMNode;
 BEGIN
     -- 向文档节点加入根节点:<PEOPLE></PEOPLE>
     root_node := xmldom.appendChild(main_node, xmldom.makeNode(root_elmt));
     --附加查询条件
     tempSql := tempSql||sqlStr;
     --打开游标
     OPEN cur FOR tempSql;
     --遍历游标
     LOOP
       FETCH cur INTO personRow;
       EXIT WHEN cur%NOTFOUND;
       --===========================================================================--
       person_elmt := xmldom.createElement(doc, 'PERSON'); --创建PERSON元素
       -- 向PEOPLE节点加入 PERSON节点<PERSON></PERSON>
       person_node := xmldom.appendChild(root_node, xmldom.makeNode(person_elmt));
       --===========================================================================--
       --向PERSON节点加入属性PERSONID
       xmlDom.SETATTRIBUTE( person_elmt, 'PERSONID', personRow.personId );
       --===========================================================================--
       name_elmt := xmldom.createElement(doc, 'NAME');      --创建NAME元素
       --向PERSON节点加入子节点NAME
       name_node := xmldom.appendChild(person_node,xmlDom.makeNode(name_elmt));
       --向NAME节点加入文本
       temp_node := xmldom.appendChild(name_node , xmlDom.makeNode(xmldom.createTextNode(doc,personRow.name)));
       --===========================================================================--
       address_elmt := xmldom.createElement(doc, 'ADDRESS');      --创建ADDRESS元素
       --向PERSON节点加入子节点ADDRESS
       address_node := xmldom.appendChild(person_node,xmlDom.makeNode(address_elmt));
       --向ADDRESS节点加入文本
       temp_node := xmldom.appendChild(address_node, xmlDom.makeNode(xmldom.createTextNode(doc,personRow.address)));
       --===========================================================================--
       tel_elmt := xmldom.createElement(doc, 'TEL');      --创建TEL元素
       --向TEL节点加入子节点 NAME
       tel_node := xmldom.appendChild(person_node,xmlDom.makeNode(tel_elmt));
       --向TEL节点加入文本
       temp_node := xmldom.appendChild(tel_node, xmlDom.makeNode(xmldom.createTextNode(doc,personRow.tel)));
       --===========================================================================--
       email_elmt := xmldom.createElement(doc, 'EMAIL');      --创建EMAIL元素
       --向PERSON节点加入子节点EMAIL
       email_node := xmldom.appendChild(person_node,xmlDom.makeNode(email_elmt));
       --向EMAIL节点加入文本
       temp_node := xmldom.appendChild(email_node, xmlDom.makeNode(xmldom.createTextNode(doc,personRow.email)));
       --===========================================================================--
     END LOOP;
     CLOSE cur;
     --写入硬盘

     xmlDom.writeToFile(doc,'UTL_FILE_DIR'||'/'||file_path,'GBK');
   EXCEPTION
    WHEN OTHERS THEN
      DBMS_output.PUT_LINE(SQLERRM);
 END OUTPUTPEOPLE;

0
1
分享到:
评论

相关推荐

    ORACLE 存储过程返回结果集,拼接为字符串输出为clob

    大数据量,返回值虽然是CLOB,依然会报错; CLOB变量需要dbms_lob.createtemporary,临时表空间中,建立临时LOB。 大数据量,返回值虽然是CLOB,依然会报错; CLOB变量需要dbms_lob.createtemporary,临时表空间中,...

    Oracle 11g全新特性完全解析XML成为热点

    在Oracle 11g当中,用户可以获得多个方面的性能提升。Oracle移动数据的速度已经... 在Oracle 11g可以使用CLOB及二进制两种方式保存XML信息,灵活性很高。Oracle 11g还支持针对XML的查询机制,同样有多种机制可以选用。

    XML DB Query 简体中文版

    可以访问MS-SQL Server、Oracle及Access数据库,对于MS-SQL Server及Oracle可以一次执行多条SQL语句及存储过程 ?●?提供一个命令窗口,可以执行全部或选中的语句,可以将这些SQL语句保存到查询文件或从查询文件中...

    oracle数据库数据同步

    客户要求两台数据库服务器在不能直接通信的情况下,要保证两台数据库数据保持同步,并且要保证效率,数据量一般每分钟最少可以到达2万条(只能通过端口访问),所以只能使用程序先生成满足特定格式的文件(我这里是...

    用JSP实现XML文件到Oracle数据库的导入和导出.pdf

    ]现阶段比较成熟稳定的JAVA 平台,具体实现技术为JDK1.6.0+Tomcat+Hibernate+Oracle9i,以JSP 为技术实现XML 文件 到Oracle 数据库的导入和导出。

    Oracle_Database_11g完全参考手册.part3/3

    第52章 Oracle中的XML指南 第Ⅷ部分 附录 附录A 命令和术语参考 作者介绍 Kevin Loney是Oracle数据库设计、开发、管理和调整方面的国际知名专家。作为金融界的一名企业数据库架构师,2002年他被Oracle Magazine...

    Oracle_Database_11g完全参考手册.part2/3

    第52章 Oracle中的XML指南 第Ⅷ部分 附录 附录A 命令和术语参考 作者介绍 Kevin Loney是Oracle数据库设计、开发、管理和调整方面的国际知名专家。作为金融界的一名企业数据库架构师,2002年他被Oracle Magazine...

    C#基类库(苏飞版)

    操作Xml文档的帮助类,主要是添加,删除,修改,查询节点的操作和操作后进行保存的功能。 XMLProcess 操作Xml文档的帮助类,主要是添加,删除,修改,查询节点的操作的功能。 12.弹出消息类 MessageBox JS弹出...

    C#开发经验技巧宝典

    0937 将结果转换为XML形式 547 0938 追加查询结果到已存在的表 547 0939 利用对多个表中的字段创建新记录集 547 0940 利用EXECUTE执行SQL语句 548 第20章 数据库技术 549 20.1 Access数据库的使用 550 ...

    Navicat Premium操作手册.7z

    3Oracle 外部表访问参数59Oracle 索引组织表59Oracle 索引组织表选项59Oracle 视图60Oracle 函数或过程61Oracle 数据库链接62Oracle 索引63Oracle Java65Oracle 实体化视图66Oracle 实体化视图日志68Oracle 包69...

    Liquibase 3.3.3 bin

    * 提供数据库比较功能,比较结果保存在XML中,基于该XML你可用Liquibase轻松部署或升级数据库。 * 以XML存储数据库变化,其中以作者和ID唯一标识一个变化(ChangSet),支持数据库变化的合并,因此支持多开发人员...

    Liquibase 3.4.2

    * 提供数据库比较功能,比较结果保存在XML中,基于该XML你可用Liquibase轻松部署或升级数据库。 * 以XML存储数据库变化,其中以作者和ID唯一标识一个变化(ChangSet),支持数据库变化的合并,因此支持多开发人员...

    liquibase-3.4.2-bin.zip(Nov 24, 2015)

    * 提供数据库比较功能,比较结果保存在XML中,基于该XML你可用Liquibase轻松部署或升级数据库。 * 以XML存储数据库变化,其中以作者和ID唯一标识一个变化(ChangSet),支持数据库变化的合并,因此支持多开发人员...

    达内总结的java最新笔试题core java,sql,web应有尽有

    索引组织表:数据按主码存储和排序,同索引结构一样,不过数据直接存储于主码后面。适用于信息.检索、空间和OLAP程序。索引组织表的适用情况: a.代码查找表。 b.经常通过主码访问的表。 c.构建自己的索引结构。 d....

    Knowledgebase-2.0:基于Java的内容存储库,以基于Spring和Jackrabbit的博客样式存储基于文本的信息

    XML导出和导入响应包含XML数据的计算得出的sha-256哈希 可以通过任务栏图标访问的Windows应用程序 REST接口,用于将您的自定义前端连接到“ Knowledgebase 2.0”后端 SSL对HTTP的支持 具有消息属性的语言支持 管理...

    数据库设计和自动安装工具BDB V2.2(for Oracle/MS SQLServer/MySQL/Access/SQLAnywhere/Sybase)

    &lt;br&gt;此外、在BDB中提供了对开发语言的支持、 其数据库结构定义文件采用XML标准格式、 并且开放了外部读取数据库结构的源程序(C#/Delphi/JAVA)、 您可以通过使用BDB来简化软件开发和部署过程: &lt;br&gt;1...

Global site tag (gtag.js) - Google Analytics