db2 调用存储过程sql_在DB2 SQL存储过程中使用XML

db2 调用存储过程sql

用于Linux,UNIX®和Windows®的IBM®DB2®9在先前的DB2发行版之上添加了主要的新XML功能。 在DB2 9之前,您可以将XML文档存储为LOB,也可以将传入的XML数据切入关系表中,该过程需要一个名为XML Extender的附加工具。 但是,DB2 9使用户能够以其本机分层格式存储和查询XML数据-一种称为pureXML™支持的技术。 现在 ,您可以在XML数据上建立索引,并使用对存储过程的调用来执行粉碎。

本文讨论了XML在SQL存储过程中的使用。 我提供了许多代码示例来帮助说明特定的技术要点。 提供的示例旨在帮助您理解,因此尽可能地简化。 为了实现此目标,请注意,这些示例有些人为设计。

注意:本文假定您是应用程序开发人员或DBA,他们已经熟悉编写SQL存储过程。

XML简介

XML代表“可扩展标记语言”,这是一种以非常类似于HTML的语法表示信息的分层方法。 XML文档是由“元素”或分支组成的树形结构。 每个元素都有一个名称,可以包含一个文本值,可以具有一个属性列表(格式为“ name = value”),并且可以具有子级。 允许重复的元素名称,尽管属性名称在元素内必须唯一。

XQuery是基于W3C标准的XML查询语言。 它通常在任何关系数据库之外用于查询XML数据,该数据可以存储在文本文件中。 XQuery允许您访问XML数据(包括联接),循环,声明的变量,IF / THEN / ELSE语句和其他构造。

在DB2 9中有四种使用XML数据的不同方法:

  • 普通SQL
    • 普通SQL由常规SQL语句和函数组成,这些语句和函数没有对XPath或XQuery的引用。 功能仅限于将XML文档作为完整实体使用。 可以将它们插入数据库或从数据库中检索它们,以及将其转换为文本或不转换为文本。 但是,无法解析出XML文档的一部分,也无法应用任何谓词。
  • 带有嵌入式XQuerySQL / XML
    • SQL / XML包括三个新SQL函数,这些函数可处理XML数据并将嵌入式XQuery命令作为参数-XMLQUERY,XMLEXISTS和XMLTABLE。
      • XMLQUERY用于从XML数据提取。 结合功能XMLCAST,关系数据可以从XML派生。
      • XMLEXISTS将谓词应用于XML数据,通常在WHERE子句中使用。
      • XMLTABLE以关系表的形式提取XML数据。
  • XQuery
    • 现在可以在DB2数据库引擎中本地理解XQuery。 提供了两个函数来访问DB2数据。 第一个db2-fn:xmlcolumn将XML列的值返回到XQuery。 包括所有行; 没有谓词。
  • 带有嵌入式SQL的XQuery
    • 还提供了db2-fn:sqlquery函数来访问DB2数据,并使用SELECT语句作为参数。 SELECT可以做任何您想做的事情,但是必须在SELECT列表中返回XML类型的单个列。

存储过程中受支持的XML功能

对于DB2 9,SQL语言存储过程采用了新功能,以便使用XML数据。 可以使用新的数据类型“ XML”。 您不仅可以将其用于表中的列,还可以将其用于参数和声明的变量。 DB2 9还通过增强SELECT和UID语句以及一些新的XML函数来添加功能。

这通过以下方式增强了SQL存储过程:

  • 您可以使用新的XML函数(例如XMLQUERY,XMLEXISTS,XMLTABLE):
    • 在游标中
    • 允许使用任何SELECT语法,例如SELECT INTO和VALUES
    • 变量分配,例如SET语句
  • XML列可以是:
    • 返回游标结果集中
    • 绑定(?符号)到SELECT和UID语句中
  • IF / THEN / ELSE语句可以测试XMLEXISTS谓词
  • 可以从以下类型加载XML类型的变量:
    • SELECT INTO语句
    • VALUES INTO语句
    • 取得INTO陈述式
    • 执行INTO语句
    • SET语句

局限性和解决方法

SQL存储过程中的XML功能有一些限制:

  • XQuery查询只能作为动态游标的一部分运行。
  • XML变量在COMMIT或ROLLBACK之后不可用。

动态游标中的XQuery

XQuery命令可以出现在两个不同的上下文中:

  • 在单引号中作为SQL / XML函数XMLQUERY,XMLEXISTS和XMLTABLE的参数

    静态SQL语句中允许在SQL / XML函数中嵌入XQuery。 在下面的示例中,变量adrs是XML列或XML类型的变量。

    清单1. SQL / XML函数中的嵌入式XQuery
    XMLQUERY('$d/cust/name' PASSING adrs AS "d")

    注意:此示例仅包含一个非常简单的XPath表达式,但是SQL / XML函数(XMLQUERY,XMLEXISTS,XMLTABLE)可以包含任何有效的XQuery,包括复杂的FLWOR表达式。

  • 作为查询

    XQuery查询只能在动态游标中定义。 SQL存储过程中不允许以下内容:

    清单2. SQL存储过程中不允许使用静态XQUERY
    XQUERY 
    for $dept in db2-fn:xmlcolumn("DEPT.DEPTDOC")/dept
    where $dept/@deptID="PR27"
    return $dept/employee/name

COMMIT或ROLLBACK之后的XML变量

在COMMIT或ROLLBACK之后,参数和声明的XML变量均不可用。 尝试使用XML变量而不先给它们分配新值会产生如下错误:

清单3.在COMMIT / ROLLBACK之后收到的错误消息 </
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值