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

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
分享到:
评论

相关推荐

    pb中执行oracle存储过程脚本

    Oracle存储过程则是在Oracle数据库中预编译的一系列SQL和PL/SQL语句,可以视为数据库端的可执行代码。 在描述中提到的“使用批处理进行oracle存储过程脚本的创建和更新的处理”,这可能意味着开发者使用批处理命令...

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

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

    oracle xml 转换 存储过程

    本文介绍了如何在Oracle中通过存储过程将数据库查询结果转换为XML文件的详细过程。这种技术不仅可以应用于Oracle数据库本身的数据导出,还可以作为其他系统之间数据交换的基础。通过自定义存储过程,可以灵活地控制...

    java调用oracle存储过程入门实例 增删改查

    总结来说,这个入门实例涵盖了使用Java通过JDBC调用Oracle存储过程进行CRUD操作的基本流程,以及利用DOM4J解析XML配置文件和`ThreadLocal`管理数据库连接的方法。这样的设计使得程序更加模块化,易于维护,同时也...

    sql存储过程与xml编程

    2. 存储XML数据:现代数据库系统,如SQL Server、Oracle等,支持将XML数据直接存储在数据库中,提供了处理XML数据的特有函数和操作。 3. XML与SQL的集成:通过XMLA(XML for Analysis)等接口,可以使用XML与SQL ...

    oracle 使用XMLDOM包,保存XML节点数据到数据库表中,支持多个节点嵌套XML格式

    ### Oracle使用XMLDOM包保存XML节点数据到数据库表中的实践 #### 一、背景与需求分析 在实际项目开发过程中,经常会遇到与第三方系统交互的需求。这些第三方接口往往返回的数据格式为XML。为了方便后续处理及存储...

    oracle存储过程(语法+实例).docx

    - 在存储过程中,`SELECT` 后的字段必须跟 `INTO` 关键字,将结果保存到变量中,除非使用游标处理多行记录。 - 使用 `SELECT...INTO...` 时,确保查询结果存在,否则会抛出"No data found"异常。 - 别名不应与...

    ORACLE操作XML函数

    例如,在一个表中可能有一个字段名为`warehouse_spec`,该字段就是用来保存仓库信息的XML文档。 - **XPath_string**:这是一个字符串,用于指定XML文档中需要操作的节点路径。路径可以是绝对路径(如`/info/Owner`...

    将数据库数据以XML文件格式保存

    3. **转换数据**: 使用数据库提供的功能或编程语言(如Python、Java、PHP)的库将查询结果转换为XML。例如,SQL Server有`FOR XML`子句,MySQL有`XML CONCAT`函数,而Python有`xml.etree.ElementTree`模块。 4. **...

    ORACLE XML DB

    ORACLE XML DB 为用户提供了一种强大的工具,不仅可以高效地存储和检索 XML 数据,还能充分利用 Oracle 数据库本身的优势。通过结合 XML 技术与关系数据库技术,ORACLE XML DB 实现了数据管理的高度灵活性和强大功能...

    如何获得XML格式的Oracle 10g审计跟踪

    Oracle 10g 数据库提供了多种审计方式,其中包括将审计跟踪保存在系统表 SYS.AUD$、操作系统事件日志以及XML文件中。本篇重点讨论如何启用和利用XML格式的审计跟踪,它提供了诸多优势,比如便于外部工具处理、增强...

    Oracle XML DB应用开发.rar

    1. **XML DB概述**:Oracle XML DB是Oracle数据库对XML数据的支持,它将XML数据作为第一类公民,提供了存储、索引、查询、验证和转换XML文档的全面功能。 2. **存储方式**:Oracle XML DB使用BFILE、BLOB、CLOB或...

    XML在Oracle数据库中的应用参考.pdf

    同时,Oracle的DBMS_XSLPROCESSOR包可用于XML文档的转换,DBMS_XMLGEN用于生成XML,DBMS_XMLSAVE用于保存XML到数据库,这些工具进一步增强了XML在Oracle中的处理能力。 总之,Oracle数据库通过XDB组件和XMLTYPE数据...

    用excel生成xml文件数据存储过程触发器等

    在保存过程中,Excel会尝试识别表格中的结构并将其转换为XML元素。用户还可以利用Excel的宏功能,编写自定义脚本来自动化这个过程,实现批量生成XML文件。 接下来,我们讨论“存储过程”。存储过程是数据库管理中的...

    利用XSU实现Oracle数据库与XML文档转换.pdf

    XSU是Oracle 8i版本后引入的一组Java类,它允许应用程序通过JDBC与数据库进行交互,将查询结果以XML格式返回,同时也能将符合数据库模式的XML文档插入到数据库中。 XSU的主要功能包括: 1. **XML到关系数据的转换*...

    DBMS_XMLDOM DBMS_XMLPARSER DBMS_XMLQUERY 文档

    DBMS_XMLDOM提供了一系列的函数和过程,用于创建、修改、遍历和保存XML文档。例如,你可以使用DBMS_XMLDOM.newDoc()来创建一个新的XML文档对象,使用DBMS_XMLDOM.parseXML()将XML字符串解析成DOM树,然后通过DBMS_...

    Sqlserver 采用xml入参获取检查报告存储过程和函数

    最后,我们将创建一个存储过程,该过程接收 XML 格式的参数,并使用之前定义的函数来解析这些参数,从而获取相应的检查报告信息。以下是一个示例存储过程: ```sql CREATE PROCEDURE dbo.sp_GetReport @xmlInput ...

    数据库转化为xml文件

    根据映射规则,将查询结果转换成相应的XML结构。 - **处理复杂数据类型**:如果数据库包含复杂数据类型,如数组或自定义对象,需要将其拆分成多个XML元素或使用XML的特殊结构(如CDATA或属性集合)来表示。 - **...

    -Oracle Database XML C++ API Reference 11g Release 2 (11.2)-196

    这些类包括XMLDoc和XMLType,它们是XML数据的主要接口,允许开发者将XML文档直接存储为数据库中的列或行。 3. **XMLDoc类**:XMLDoc类用于构建和管理XML文档对象。它支持从字符串、文件或输入流加载XML数据,以及将...

    oracle触发器实现二维码

    描述中提到,这个资源是通过Java代码生成二维码图片,然后利用触发器将生成的二维码图片转换为BLOB(Binary Large Object)格式,并将其存储到Oracle数据库的表中。BLOB类型字段用于存储非结构化的二进制数据,非常...

Global site tag (gtag.js) - Google Analytics