人大金仓数据库KingbaseES dbms_xmlquery包使用技巧--集合元素处理方式

关键字:

KingbaseES、XML、DBMS_XMLQUERY、集合元素、人大金仓

概述

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

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

DBMS_XMLQUERY

在前篇文章中,我们简单介绍了KES中DBMS_XMLQUERY包的一些使用方法,主要包括了如何对句柄生成XML文本数据的行进行处理,那么接下来在本文中我们将继续介绍这个包中的一些自定义函数,主要包括这些函数的使用方法,功能以及函数参数介绍等。并将这些函数以小章节的形式展开介绍,方便读者了解这些函数的具体功能与使用方法。

2.1 setCollIDattrName

首先第一个是一个存储过程:setCollIDattrName,这个存储过程的主要作用是用于设置对查询结果中集合元素属性名称设置,集合元素可以理解为数组或是用户自定义数据类型,在Oracle中并没有数组类型只能由用户自定义设置集合类型,而KES中不仅提供了用户自定义类型,还提供设置了数组类型,数组就是一种元素的集合体。而从SQL到XML类型过程中,由于一般的行列值均为单值,因此常规的SQL到XML数据中子目录均为一个值,而数组集合类型则可以在XML数据中表现为多个子目录,那么对于这种类型KES提供了这个存储过程用于修改集合类型元素的属性值,使得生成的XML格式文本中集合元素具备一定的实际使用意义。它的具体语法如下所示:

procedure setCollIDattrName(ctxhdl in ctxhandle,attrName in varchar2);

从语法角度分析这个存储过程,这个存储过程的使用方法与我们前面文章介绍的使用方法是一致的,其中第一个参数同样为dbms_xmlquery包中所声明的句柄类型,第二个参数是一个in类型的varchar2类型的参数,在我们默认不设置第二个参数时,它使用的属性名称依旧是我们的基数属性num,当传值为null时,则会取消属性值的显示,这一点和我们之前所提到的setRowIDattrName存储过程的功能和表现形式是一样的,只是这个两个存储过程作用的对象不同,本文所介绍的这个存储过程用于对集合元素进行处理设置。通过对集合元素对象的属性值进行设置可以获得一个具备实际属性意义的XML格式文本。

2.2 useTypeForCollElemTag

其次第二个set存储过程:useTypeForCollElemTag,它的作用是用于设置集合元素的标签值,标签值就是包裹元素实体的开始和结束符号,在默认情况下,这个值会被设置为对应的集合元素类型,而这个存储过程则提供给用户可以自定义的显示集合元素内元素值的类型, 它的具体语法如下所示:

procedure useTypeForCollElemTag(ctxhdl IN ctxhandle, flag IN boolean := true);

从语法角度分析可以看出,其中第一个参数同样为dbms_xmlquery包中所声明的句柄类型,第二个参数同样是一个in类型的boolean类型的参数,并且它的默认值设置在默认情况下为true,即在默认情况下用户输出的集合元素其子元素的标签值为元素类型,而用户传入false时,则可以显示出该子元素的父元素列名_item,表明子元素是父元素的子集合,集合元素中父子关系更加明显,也方便一些实际操作。

函数使用技巧

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

declare

    ctx dbms_xmlquery.ctxtype;

    xml clob;

begin

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

    dbms_xmlquery. setEncodingTag (ctx,'GB18030');

    dbms_xmlquery. setCollIDattrName (ctx,‘TRUE’);

    dbms_xmlquery. useTypeForCollElemTag (ctx,TRUE);

    xml := dbms_xmlquery.getxml(ctx);

    dbms_output.put_line(xml);

    dbms_xmlquery.closecontext(ctx);

end;

在上面的PL/SQL执行块中,我们将一个查询结果提供给了额一个句柄类型,并根据我们自定义设置了一些生成的XML内容,如该XML中集合元素的设置方式等。

那么结合这么多篇文章,对于dbms_xmlquery包的介绍也到了尾声,这个包不仅提供了用户从SQL到XML的数据文本转换,还提供了灵活创建xml格式文本的方法。如果对DBMS_XMLQUERY包还有任何疑问可以参考之前的文章或者结合KES的手册来对KES中的XML数据进行更深的了解。

总结

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

参考资料

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值