将大型 XML 文档加载到数据库中

引言

Oracle XML DB 是一组专门为 XML 开发的内置高性能存储和检索技术。Oracle XML DB 将 World Wide Web Consortium (W3C) XML 数据模型完全吸收到 Oracle9 face="Times New Roman, Times, serif">i 数据库中,并为导航和查询 XML 提供了新的标准访问方法。可以同时获得关系数据库技术和 XML 技术的所有优势。Oracle XML DB 可用于存储、查询、更新、转换或处理 XML,并可使用 SQL 查询访问相同的 XML 数据。

在本段中,我们提供了将大型 XML 文档加载到 XMLType 表或 XMLType 列中的 PL/SQL 方法JDBC 方法

运行代码段的前提条件

  • Oracle9i 数据库(9.2.0.1 版本以及更高版本)。
  • Classes12.zip 或 Classes12.jar,在 ORACLE_HOME\jdbc\lib 目录下提供,应该被包含在 JDBC 方法的 CLASSPATH 环境变量中。
  • 创建所需数据库表的 SQL 脚本。请在运行代码示例前执行以下 SQL。
    CREATE TABLE poTable (purchaseOrder XMLType) ;

    注:为了进行演示,我们考虑将 XML 文档加载到 XMLType 列中。同样的方法也可用于 XMLType 表。

代码段

  • PL/SQL 方法
  • JDBC 方法

PL/SQL 方法

将大型文档插入到 XMLType 列的正确方法是使用 CLOB 而不是 VARCHAR2,因为使用 VARCHAR2 最多只能加载 4000 个字符。与之相反,CLOB 可以包含多达 4GB 的字符,可用于加载包含超过 4000 个字符的 XML。如果使用 VARCHAR2 将大型 XML 文档(包含超过 4000 个字符)插入到 XMLType 列,则会出现数据库错误 "ORA-01704:string literal too long"。以下示例通过使用 CLOB 包含 XML 文档,提供了解决此问题的一种方法。

使用 PL/SQL 过程 'loadPurchaseOrder' 来演示大型 XML 文档的加载过程。在此过程中,声明了一个 CLOB 对象 'poXML',用于包含需要存储到数据库中的 XML 内容。XML 将被存储到表 'poTable' 的 XMLType 列 'purchaseOrder' 中。CLOB 对象所包含的 XML 是包含超过 4000 个字符的大型 XML 文档。

CREATE or REPLACE PROCEDURE loadPurchaseOrder IS
-- Declare a CLOB variable
poXML CLOB;
BEGIN
-- Store the Purchase Order XML in the CLOB variable
poXML := '

1001
Oracle Corp
.
.
.
';
-- Insert the Purchase Order XML into an XMLType column
INSERT INTO potable (purchaseOrder) VALUES (XMLTYPE(poXML));

--Handle the exceptions
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20101, 'Exception occurred in loadPurchaseOrder procedure :'||SQLERRM);
END loadPurchaseOrder;

与上述示例相似的 PL/SQL 过程可用于将大型 XML 文档加载到 XMLType 列中。

限制:在 PL/SQL 中,字符串常数最大为 64K。如果要将大于 64k 的 XML 文档加载到 XML DB 中,最好的方法是从文件中加载该文档。关于此方法的详细信息,请参阅 XML DB 示例区的“Oracle XML DB 实用程序包” /global/cn/sample_code/tech/xml/xmldb/content.html。

JDBC 方法

如果使用 JDBC 中的字符串对象将大型 XML 文档(通常多于 4000 个字符)插入到 XMLType 列中,将会出现运行时错误 "java.sql.SQLException:Data size bigger than max size for this type"。通过使用包含大型 XML 文档的 CLOB 对象,可以解决此问题。

以 下代码演示了使用 Java CLOB 对象加载大型 XML 文档的过程。在客户端使用 oracle.sql.CLOB 类创建 CLOB 对象,用于包含 XML。oracle.sql.CLOB 类是标准 JDBC java.sql.Clob 接口的 Oracle JDBC 驱动程序的实现。

要加载 XML,第一步是在客户端创建将要包含 XML 内容的 CLOB 对象。 在创建包含 XML 内容的 CLOB 对象之后,下一步是绑定 CLOB 对象与 JDBC 准备语句,该语句用于将 XML 数据插入到 XMLType 列中。

第 1 步:创建 CLOB 对象

以下的方法 getCLOB() 创建并返回包含指定 XML 数据的 CLOB 对象。该方法可用于将 XML 字符串插入数据库的 XMLType 列中。

点击此处查看 getCLOB() 方法的代码

第 2 步:使用 CLOB 对象将 XML 文档加载到数据库中。

包含 XML 的 CLOB 对象需要绑定到 JDBC 的准备语句,该语句用于将数据插入到数据库中的 XMLType 列。以下的方法 insertXML() 演示了将 XML 数据插入到 XMLType 列中。该方法使用准备语句来执行数据库查询。它调用上述的 getCLOB() 方法,创建并返回包含 XML 数据的 CLOB 对象。

点击此处查看 insertXML() 方法的代码。

你可能感兴趣的:(将大型 XML 文档加载到数据库中)