人大金仓数据库KingbaseES--- dbms_xmlquery包使用技巧(一)

关键字:

Kingbase ES、XML、DBMS_XMLQUERY、人大金仓

概述

在目前的KingbaseES的使用过程中,我们会遇到数据库需要存储XML格式的数据,或者需要对查询的数据进行转换的问题,XML格式的数据类似于HTML格式数据,XML是一种扩展标记语言,最早于1998年被引入软件工业界,它不仅可以在WEB前端使用还可以应用于后端数据处理以及数据库存储等。

那么如何使用KingbaseES数据库对XML格式的数据进行读取,或者说如何使用KingbaseES数据库对我们查询到的结果转换为XML数据格式,从而方便我们后续的一些处理如:前后端系统间的交互等,那就不得不提到KingbaseES数据库所带有的dbms_xmlquery系统包了,这个系统包是kes用于兼容对xml文本格式自定义处理的一系列过程与函数的集合。

DBMS_XMLQUERY

Dbms_xmlquery包用于执行xml数据的查转换操作,它的核心功能是用于对数据库到XML数据的转换,即将数据库的查询结果集结合用户的一些自定义选项来对其进行调整最终完成一个XML格式文本数据,这个包在oracle中也有,但与kes不同的是oracle中基本不考虑这个生成的XML文本数据的有效性,即oracle中的dbms_xmlquery包不考虑生成的xml格式文本是否是格式良好的,而kes中则为了保证良好格式的xml格式数据,在生成过程中加入了对生成的xml格式数据的校验,即我们无法使用这个包来生成一个非法的xml格式文本,并且由于我们生成的时xml格式文本,那么这个文本本质上可以被多个客户端所应用,虽然降低了该数据的xml强相关性,但是提高了该类型数据的泛用能力,并且由于kes强制生成的xml数据是合法的,那么这个合法的xml文本数据就可以应用于各个处理xml的终端中。那么接下来使用这个系统包的第一步就是需要了解它的包内函数与过程,这个包中的函数与过程较多,我们首先介绍核心的函数与过程即:构造函数以及生成xml函数,这两个函数涉及到整个包的核心功能的使用:

首先构造函数newcontext,它的具体语法如下所示:

    function newContext(queryString in varchar2) return ctxHandle;

    function newContext(queryString in clob) return ctxHandle;

包含了两种构建方式分别为varchar2类型的查询以及clob类型的查询结果集,dbms_xmlquery包中构造函数newcontext返回的类型ctxhandle与ctxtype均为句柄类型,它提供给使用者一个关于结果集的句柄,使得后续的所有自定义的xml操作都可以根据句柄的方式关联到对应的处理结果上,从而达到交叉使用的方式,这个构造函数的入参共有一个但有两个重构类型,其核心内容就是查询语句以及或者有较多内容的查询语句,它可以将输入的查询语句对应的抛出一个句柄类型使得使用者可以获得这个句柄,并通过句柄来对后续操作提供关联方式。

那么在构造完成后,我们需要利用这个句柄来生成xml格式文本数据,这时就需要用到第二个函数getxml,它的具体语法如下所示:

    function getXML(ctx in ctxHandle, dtdOrSchema in number := 0)

        return clob;

    function getXML(sqlQuery in varchar2, dtdOrSchema in number := 0)

        return clob;

    procedure getXML(ctx in ctxHandle, xDoc out clob, dtdOrSchema in number := 0);

可以看到这个函数共有两个重构函数类型,一个过程类型,那么我们首先来分析其中的参数内容,ctx是一个句柄类型,即我们可以通过利用newcontext获得的句柄在这里调用getxml函数来生成一个xml格式文本,可以看到最终的返回值类型为clob类型,因此这个数据类型并不是xml类型,只是遵循了xml数据的规则生成的xml格式文本。

第二个参数dtdorschema参数是生成xml数据是否携带dtd格式或者schem格式,这个值默认为0表示不携带。设置为1的时候表示携带dtd格式,设置为2时表示携带schem格式。

第三个参数sqlquery是一个查询语句,它也是重构getxml函数中的第一个参数,这个参数表示可以直接将一个查询语句输入到getxml中,并直接根据该查询语句的结果集生成一个xml文本格式数据。

第四个是一个xdoc类型数据,这是一个存储过程类型的数据,它是在第三个存储过程中所用到的参数,该参数的目的是通过该过程中第一个输入的句柄来生成一个xdoc数据并返回出去,且该类型为clob类型。

通过上述的这些参数描述我们就可以利用getxml来生成一个我们所需要的xml文本格式数据。

函数使用技巧

通过第二章节的介绍,我们大致了解了这个函数的具体参数以及函数返回类型的意义,那么在了解这些内容的基础上,我们就可以很好的实现这个函数的调用,这个包由于是KingbaseES提供的,那么在使用时,我们需要调用create extension来创建这个包,我们可以选择在当前事务的过程中执行。只要表在当前事务中可以运行,那么我们就可以利用表来生成XML数据,那么利用一个PL/SQL执行块来执行这个函数,具体的调用方法如下所示:

  declare

        ctx dbms_xmlquery.ctxtype;

xml clob;

begin

ctx := dbms_xmlquery.newcontext(“select * from test”);

xml := dbms_xmlquery.getxml(ctx);

dbms_xmlquery.closecontext(ctx);

    end;

在上面的PL/SQL执行块中,我们将一个查询结果提供给了一个句柄类型,并通过这个句柄类型生成了对应的xml文本数据,并在结束后关闭了这个句柄类型。这样XML中就存放了我们表的查询结果集到XML数据映射的结果集。

总结

在KingbaseES数据库的使用过程中,我们总是要应对各式各样的数据类型以及各种类型之间的转换,而在对XML数据格式的处理中,KingbaseES提供了一个系统包来提供将数据库到XML格式数据类型的转换。这样我们就可以直接将SQL查询的结果应用于其他的处理操作中。在使用过程中,我们任然需要加强对KingbaseES的探索,因为KingbaseES是一个强大的数据库管理系统,这里任然有许多强大的功能与特性值得我们去发现。

参考资料

《KingbaseES数据库-PL/SQL包与函数》

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值