`

oracle存储过程生成xml

阅读更多
我整理了一个方法
1.创建如下存储过程,注意将其中location =>'d:\work'之中的目录改为你本机的某个目录.

create or replace procedure getXML(newContext_qry varchar2,rowSettag varchar2,rowTag varchar2,filename varchar2) is
-- Input query string
-- Input rowsetTag , the root tag
-- Input row level tag
-- Input file name
-- Note make sure that before running this procedure, it is required that UTL_FILE_DIR must
-- be set in init.ora file In this code it has been set to d:\work.
begin
declare
qryCtx dbms_xmlgen.ctxHandle ;
result clob;
lob_length     integer;
read_amount    integer;
read_offset    integer;
buffer         varchar2(100);
loc            varchar2(100) := 'usr_dir';
f_hand         utl_file.file_type;

Begin
        -- Setting up offset and no. of chars to be read in
        -- in one go from clob datatype.
        read_offset := 1;
        read_amount := 75;

        dbms_output.put_line('opening');
        --Opening file
        f_hand := Utl_File.Fopen(location =>'d:\work',
                                 filename =>filename,
                                 open_mode =>'w',
                                 max_linesize => 32767);
        dbms_output.put_line('file open');
       
        -- Creating new context
        qryCtx := dbms_xmlgen.newContext(newContext_qry);
       
        -- Defining Rowsettag
        DBMS_XMLGEN.setRowSetTag(qryCtx,rowSettag);

        -- Defining Rowtag     
        DBMS_XMLGEN.setRowTag(qryCtx,rowTag);

        -- Generating XML and storing in an clob datatype              
        result :=DBMS_XMLGEN.getXML(qryCtx);

        dbms_output.put_line('xml generated');
       
        -- Getting the length of the data stored in Clob
        lob_length := dbms_lob.getlength(result);

        -- Reading data from clob variable and writng into file.
        while (lob_length > 0) loop
        dbms_lob.read(result,read_amount,read_offset,buffer);
        dbms_output.put_line('writing in file');
        utl_file.put(f_hand,buffer);
        dbms_output.put_line('written');
        read_offset := read_offset+read_amount;
        lob_length := lob_length-read_amount;
        if lob_length < read_amount then
           read_amount := lob_length;
        end if;
        end loop;
        utl_file.fclose(f_hand);



        EXCEPTION WHEN UTL_FILE.INVALID_PATH THEN
        RAISE_APPLICATION_ERROR(-20100,'Invalid Path');

        WHEN UTL_FILE.INVALID_MODE THEN
        RAISE_APPLICATION_ERROR(-20101,'Invalid Mode');

        WHEN UTL_FILE.INVALID_OPERATION then
        RAISE_APPLICATION_ERROR(-20102,'Invalid Operation');

        WHEN UTL_FILE.INVALID_FILEHANDLE then
        RAISE_APPLICATION_ERROR(-20103,'Invalid Filehandle');

        WHEN UTL_FILE.WRITE_ERROR then
        RAISE_APPLICATION_ERROR(-20104,'Write Error');

        WHEN UTL_FILE.READ_ERROR then
        RAISE_APPLICATION_ERROR(-20105,'Read Error');

        WHEN UTL_FILE.INTERNAL_ERROR then
        RAISE_APPLICATION_ERROR(-20106,'Internal Error');

        WHEN OTHERS THEN
        UTL_FILE.FCLOSE(f_hand);
       

end;
end;
/

2.修改init.ora参数文件中的参数utl_file_dir,将其值指定为和存储过程中location指定的目录,如D:\work,重新启动数据库。

3.登录后,执行类似如下语句
execute getXML('select * from tab','TAB','RECORD','shanfei.xml')
参数1:SQL语句
参数2:XML文件中将生成的根元素
参数3:XML文件中表格每行代表的元素
参数4:生成的xml文件名称

生成xml文件内容类似如下:
<?xml version="1.0"?>
<tab>
<record>
  <TNAME>ACCOUNTINFO</TNAME>
  <TABTYPE>VIEW</TABTYPE>
</record>
<record>
  <TNAME>ACCOUNTSTATUS</TNAME>
  <TABTYPE>VIEW</TABTYPE>
</record>

分享到:
评论

相关推荐

    使用oracle存储过程将xml文件数据导入数据库

    总结,使用Oracle存储过程导入XML文件数据涉及的关键步骤包括创建匹配的表结构、编写存储过程以解析XML并插入数据,以及调用存储过程执行导入。通过这种方式,可以高效地处理大量XML数据的导入工作,同时保持数据库...

    Oracle存储过程中使用临时表

    本篇文章将深入探讨如何在Oracle存储过程中使用临时表,包括会话级临时表和事务级临时表。 ### 会话级临时表 会话级临时表(Session-Level Temporary Tables)只在创建它的会话内可见,并且在会话结束时自动删除。...

    pb中执行oracle存储过程脚本

    在描述中提到的“使用批处理进行oracle存储过程脚本的创建和更新的处理”,这可能意味着开发者使用批处理命令(如Windows的批处理文件`.bat`)来自动化执行创建或更新Oracle存储过程的任务。批处理文件可以包含一...

    springboot整合mybatis调用oracle存储过程

    本文将深入探讨如何在Spring Boot项目中整合MyBatis,实现调用Oracle存储过程并处理游标返回的数据。 首先,我们需要在Spring Boot项目中引入相关的依赖。在`pom.xml`文件中添加Oracle JDBC驱动(ojdbc66-oracle...

    Oracle存储过程调用bat批处理脚本程序

    本话题将详细探讨如何在Oracle存储过程中调用外部的批处理脚本,如Windows系统的BAT文件,以实现数据库操作与系统命令的集成。 首先,`Oracle存储过程`是一种预编译的SQL和PL/SQL代码集合,可以被多次调用以执行...

    润乾报表调用oracle存储过程案例说明

    在实际的业务场景中,有时我们需要调用数据库中的存储过程来获取或处理数据,本篇将详细介绍如何在润乾报表中调用Oracle存储过程。 首先,我们要在Oracle数据库中创建存储过程。以下是一个简单的存储过程示例,名为...

    ibatis调用oracle存储过程

    在IT领域,特别是数据库操作与Java开发中,利用ibatis框架调用Oracle存储过程是一个常见的需求,这不仅能够提升代码的执行效率,还能增强应用程序的安全性。本文将深入解析ibatis如何与Oracle数据库中的存储过程进行...

    java调用Oracle存储过程的代码

    总结,通过Java调用Oracle存储过程,我们需要配置JDBC驱动,建立数据库连接,创建CallableStatement,设置参数,执行存储过程,并处理返回的结果。在这个例子中,我们展示了如何调用一个简单的存储过程并打印返回的...

    oracle存储过程返回多行多列的结构化数组,java调用并解析

    总结来说,本示例展示了如何在Oracle存储过程中定义和使用结构化数组,以及如何在Java中调用这些存储过程并解析返回的多行多列数据。通过这种方式,你可以高效地处理复杂的数据结构,同时利用Java的灵活性来处理这些...

    spring mybatis 调用oracle存储过程

    Oracle存储过程是一组预编译的SQL语句,可以在数据库服务器端执行,提供更好的性能和安全性。 1. **无返回值的存储过程**: 当存储过程不返回任何结果时,我们只需在MyBatis的Mapper接口中定义一个无返回值的方法...

    oracle xml 转换 存储过程

    根据给定的部分内容,我们可以看到一个名为`DBToXml`的存储过程被创建用于将Oracle数据库中的数据转换为XML文件,并保存到指定目录下。该存储过程接受三个参数:SQL查询语句(`strSQL`)、目标目录路径(`dir`)和...

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

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

    Oracle自动生成hibernate实体(.java 和.hbm.xml文件)存储过程

    3. 结果:执行后,存储过程会在A0表中创建或更新记录,这些记录包含生成的Java实体类和`.hbm.xml`映射文件的内容。由于A0是一个文本文件,可能需要额外的步骤来提取和处理这些数据,比如使用脚本将内容导出到实际的...

    在Oracle XML DB中存储XML

    ### 在Oracle XML DB中存储XML的关键知识点 #### 1. Oracle XML DB简介 - **Oracle XML DB** 是Oracle Database的一部分,旨在提供一个高效且灵活的方式来管理和查询XML文档。 - Oracle XML DB不仅支持XML文档的...

    oracle 高效生成指定复杂样式的xml文件

    例如,你可以创建一个过程,遍历表数据,使用XMLElement生成每个记录的XML元素,最后组合成完整的XML文档。 4. **XSLT转换**:如果需要根据特定样式生成XML,可以结合使用XSL(可扩展样式表语言)和XSLT(XSL转换)...

    SSM+Oracle 存储过程例子

    本文将详细介绍如何在SSM项目中调用Oracle存储过程,这对于提升应用程序性能和简化复杂操作具有重要意义。 首先,让我们了解一下SSM框架。SSM是由Spring框架、SpringMVC和MyBatis三个组件组成的轻量级Java Web开发...

    oracle存储过程通用分页

    Oracle存储过程是数据库管理系统Oracle中实现复杂业务逻辑的重要工具,它可以封装一系列SQL语句和PL/SQL代码,形成可重复使用的程序单元。在处理大量数据时,为了提高性能和用户体验,通常会采用分页查询的方式来...

    SQL存储过程与XML编程

    4. XML索引:为了提高处理XML数据的速度,SQL Server和Oracle等数据库系统支持创建XML索引,可以针对XML文档的特定部分进行快速查找。 5. 动态XML:存储过程可以生成动态的XML字符串,这在需要根据运行时条件生成...

    Oracle Report XML开发

    Oracle Report XML开发是一种在Oracle BI Publisher(Business Intelligence Publisher)中创建和设计报表的方法,它利用XML数据源来生成各种格式的输出,如PDF、Excel、HTML等。Oracle BI Publisher是Oracle的一款...

Global site tag (gtag.js) - Google Analytics