`
onho
  • 浏览: 16933 次
  • 来自: ...
社区版块
存档分类
最新评论

DBMS_XMLGEN+UTL_FILE+DBMS_LOB生成xml数据文件

阅读更多

CREATE OR REPLACE FUNCTION F_EXPORT2XML RETURN INTEGER IS
  RESULT     INTEGER := 0;
  XMLSTRING  CLOB := NULL;
  AMOUNT     INTEGER := 32767;
  POSITION   INTEGER := 1;
  CHARSTRING VARCHAR2(32767) := '';

  IDX_CHR10   INTEGER;
  LEN         INTEGER;
  WRITESTRING VARCHAR2(32767);
  FILEHANDLE  UTL_FILE.FILE_TYPE;

  XMLHDL DBMS_XMLGEN.CTXTYPE;

  SQLERRTEXT VARCHAR2(32767);

BEGIN

  XMLHDL := DBMS_XMLGEN.NEWCONTEXT('SELECT * FROM XXXXl');
 
  --open the file in "write" mode 
  FILEHANDLE := UTL_FILE.FOPEN('EXPDIR', 'XML_XXXX.XML', 'w');

  XMLSTRING := DBMS_XMLGEN.GETXML(XMLHDL);

  --Now open the lob data..  
  DBMS_LOB.OPEN(XMLSTRING, DBMS_LOB.LOB_READONLY);
  LOOP
    -- read the lob data  
    DBMS_LOB.READ(XMLSTRING, AMOUNT, POSITION, CHARSTRING);
    IDX_CHR10 := INSTR(CHARSTRING, CHR(10), -1);
    LEN       := LENGTH(CHARSTRING);
    IF (IDX_CHR10 < LEN AND IDX_CHR10 > 0) THEN
      WRITESTRING := SUBSTR(CHARSTRING, 1, IDX_CHR10 - 1);
    ELSE
      WRITESTRING := SUBSTR(CHARSTRING, 1, LEN - 1);
    END IF;
    UTL_FILE.PUT_LINE(FILEHANDLE, WRITESTRING);
    POSITION := POSITION + IDX_CHR10;
  END LOOP;
  RESULT := 1;
  RETURN(RESULT);
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    -- end of fetch, free the lob  
    DBMS_LOB.CLOSE(XMLSTRING);
    DBMS_LOB.FREETEMPORARY(XMLSTRING);
    IF UTL_FILE.IS_OPEN(FILEHANDLE) THEN
      UTL_FILE.FCLOSE(FILEHANDLE);
    END IF;
    RETURN(RESULT);
  WHEN OTHERS THEN
    SQLERRTEXT := SQLERRM;
    IF UTL_FILE.IS_OPEN(FILEHANDLE) THEN
      UTL_FILE.FCLOSE(FILEHANDLE);
    END IF;
    RETURN(RESULT);
END F_EXPORT2XML;

 

经测试,效率比我写的上一个版本至少提供1倍,可能在某些特殊情况下,还是会出现异常,不过不影响大局了。

0
0
分享到:
评论

相关推荐

    DBMS_XMLDOM DBMS_XMLPARSER DBMS_XMLQUERY 文档

    首先,DBMS_XMLPARSER用于解析XML数据,生成DOM树;然后,DBMS_XMLDOM提供API对DOM树进行操作,比如查找、修改、添加或删除节点;最后,DBMS_XMLQUERY可以执行XPath查询,找出需要的数据,或者进行XSLT转换,将XML...

    oracle 报表开发中用PCK直接生成xml数据文件

    本文将详细讨论如何使用Package(PCK)直接生成XML数据文件,特别关注使用`dbms_xmlgen.getXML()`过程的方法。 Oracle的`dbms_xmlgen`包提供了生成XML文档的功能,它能够将数据库查询结果转换成XML格式。在描述中...

    oracle dbms_lob

    总之,`DBMS_LOB`是Oracle数据库管理LOB数据的关键工具,对于处理大量非结构化数据的开发者来说,理解和熟练使用这个包是必不可少的技能。通过深入学习和实践,可以有效地利用Oracle的LOB功能满足大数据存储和处理的...

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

    在Oracle数据库环境中,高效地生成指定复杂样式的XML文件是一项重要的任务,特别是在处理大量数据时。Oracle提供了多种方法来实现这一目标,包括使用PL/SQL过程、内置的XML函数以及XMLType对象。以下是对这个主题的...

    使用dbms_stats包手工收集统计信息

    Oracle 数据库中使用 dbms_stats 包手动收集统计信息 在 Oracle 数据库中,dbms_stats 包提供了一种手动收集统计信息的方式,包括基于表、用户和索引的统计信息。通过使用 dbms_stats 包,我们可以手动收集统计信息...

    dbms_obfuscation_toolkit加密解密数据

    DBMS_OBFUSCATION_TOOLKIT是Oracle数据库提供的一种用于数据加密解密的强大工具包,自Oracle 8i版本开始引入。它支持多种加密算法,如DES、TripleDES以及MD5等,能够为数据的安全性提供强有力的保障。下面将详细介绍...

    DBMS_STATS.GATHER_TABLE_STATS详解.pdf

    1. **对于分区表**:建议使用 `DBMS_STATS` 而不是 `ANALYZE` 语句,因为 `DBMS_STATS` 支持并行处理、可以收集整个分区表的数据以及单个分区的数据,并且可以在不同级别上计算统计信息。 2. **对于非分区表**:同样...

    ORACLE SYS.DBMS_REGISTRY_SYS has errors

    标题中的问题“ORACLE SYS.DBMS_REGISTRY_SYS has errors”指的是在Oracle数据库系统中,系统包BODY `SYS.DBMS_REGISTRY_SYS` 出现错误,导致了一系列的PL/SQL调用失败。这种错误通常与数据库的元数据注册功能有关,...

    怎样禁用及回收java的授权dbms_java

    ### 如何禁用及回收Java的授权:dbms_java 授权管理详解 #### 一、引言 在Oracle数据库环境中,`dbms_java`包提供了一系列功能强大的工具,用于管理和控制Java应用程序的安全性。这对于那些在Oracle环境中部署了...

    DBMS_RANDOM.VALUE OR DBMS_RANDOM.STRING

    在实际开发中,`DBMS_RANDOM`经常被用来填充测试数据集,因为它可以快速生成大量看似随机但实际上可重复的数据,这对于测试环境来说非常有用。此外,它还可以在自动化脚本中用于生成唯一标识符,如订单号或用户ID。 ...

    XML_API.rar_dbms_xml api

    XML_API.rar_dbms_xml api 是一个与数据库管理和XML处理相关的资源包,主要涉及Oracle数据库中的DBMS_XML API。这个API是一组PL/SQL过程和函数,用于在Oracle数据库中操作XML数据。它允许用户生成、解析、查询以及...

    DBMS_SQL的使用

    ### Oracle DBMS_SQL 使用详解 #### 一、概述 在Oracle数据库中,`DBMS_SQL`包是一个功能强大的工具,用于执行动态SQL语句。它提供了处理动态SQL语句的能力,使得开发人员能够灵活地构建和执行SQL语句,而不需要...

    修改报表-建立RTF文档和XML文档

    总的来说,这个过程涵盖了Oracle报表的修改、XML文件的生成、并发程序的注册、数据导入与处理以及最终RTF文档的创建。对于初学者,理解这些步骤和工具的使用将极大地提升在Oracle环境中的工作效率。通过实践和理解...

    XML文件创建数据库表

    对于Oracle数据库,虽然没有直接的`LOAD XML`命令,但我们可以使用`DBMS_XMLGEN`包或`XMLType`对象来处理XML数据。例如,我们可以先将XML文件内容读入一个CLOB字段,然后通过解析XML来创建表: ```sql CREATE TABLE...

    DBMS_c.rar_C语言实现DBMS_DBMS_c_c语言DBMS_dbms

    而 "DBMS_c" 文件可能是整个 DBMS 实现的核心代码库,包含了数据结构、查询解析、事务处理、索引管理等关键组件。 在 C 语言实现的 DBMS 中,以下是一些关键知识点: 1. **数据模型**:首先,理解数据是如何组织的...

    PostgreSQL_DBMS_for_Windows_922_136133.exe

    支持ArcGIS10.2版本的PostgreSQL_DBMS_for_windows_922,ESRI官方原版资源。

    Oracle XML方法封装PackageBody

    Oracle数据库在处理XML数据时提供了丰富的功能,其中`Oracle XML方法封装PackageBody`是一个非常实用的设计,它将常用的XML操作集中在一起,以便于在数据库中进行XML数据的处理和交互。这种封装通常是为了提高代码的...

    dbms_lock控制串行详解

    DBMS_LOCK是Oracle数据库系统中的一个内置包,用于在用户会话之间实现锁的管理,以确保并发操作的安全性和数据一致性。这篇博文深入探讨了DBMS_LOCK的功能、使用方法以及在实际应用中的重要性。 首先,我们要理解...

    DBMS_SQL.rar_dbms_oracle

    在Oracle数据库系统中,DBMS_SQL是一个非常重要的包,它提供了动态执行SQL语句的功能,这对于开发复杂的数据库应用或者需要在运行时构建SQL语句的情况非常有用。DBMS_SQL允许我们处理那些在编译时未知的SQL语句,极...

    Creating XML Documents with PL/SQL

    DBMS_XMLGEN主要用于从SQL查询结果生成XML,而DBMS_XSLPROCESSOR则用于应用XSLT样式表对XML进行转换。例如,我们可以执行一个SQL查询,然后使用DBMS_XMLGEN.getXML函数将结果集转换为XML字符串。 ```sql DECLARE ...

Global site tag (gtag.js) - Google Analytics