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

文章介绍了如何在KingbaseES数据库中使用DBMS_XMLQUERY系统包处理和转换XML格式数据,包括setMAXrows、setSkiprows和getNumRowsProcessed等存储过程的使用方法,以及如何通过PL/SQL实现数据的XML映射和自定义处理。
摘要由CSDN通过智能技术生成

关键字:

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 setMAXrows

首先第一个是一个存储过程:setMAXrows,这个存储过程的主要作用是用于设置对应句柄处理的最大行数,由于KES的dbms_xmlquery包中声明的句柄包含了需要生成xml格式文本的查询语句,那么对应的就会出现于查询语句相关联的查询结果,根据查询语句的书写方式不同,那么其对应的查询结果也是不同的,不同的查询结果中查询行数也是不同的,那么通过调用dbms_xmlquery包所自定义生成的xml的行数也是不同的,为了提供用户自定义xml形式的便捷性,KES提供了这个存储过程方便用户用于自定义生成xml的行数。它的具体语法如下所示:

procedure setMAXrows(ctxhdl in ctxHandle, maxrows in number);

其中,第一个参数就是KES中dbms_xmlquery包中所声明的句柄类型,这个句柄类型依然主要用于指定对应的查询语句,第二个参数是一个in类型的number类型参数,其作用就是用于设置要自定义生成的xml格式文本的最大处理行数,通过这个存储过程,用户就可以通过对最大行数进行处理从而对一个查询语句自定义获取多个不同的xml格式文本。

2.2 setSkiprows

其次第二个set存储过程:setSkiprows,它的作用则是用于设置生成的xml格式文本中需要跳过的行数,这个存储过程可以与setmaxrows一起用,setmaxrows提供了隔绝查询结果中后面行数的方式,而setskiprows则提供了隔绝查询结果中前面行数的方式,这两个存储过程的灵活使用可以使得用户自由的操作生成的xml格式文本中所需要包含的查询结果具体是哪一部分,它的具体语法如下所示:

procedure setSkiprows(ctxhdl in ctxHandle, skiprows in number);

从语法角度分析可以看出,这个存储过程的基本使用方法与setmaxrows相同,其中第一个参数同样为dbms_xmlquery包中所声明的句柄类型,第二参数也是一个in类型的number类型参数,其主要作用是用于设置需要跳过处理的行数,并在生成的xml格式文本中体现出来,但是与setmaxrows不同在于setmaxrows不处理剩余的行数,因此在句柄中还可以继续调用生成xml函数来继续生成xml格式文本,而setskiprows则咋跳过未处理行数后,无法将跳过的行数继续使用,因此跳过的行数将无法被处理,这一点在使用时需要注意根据不同的需求来选择使用不同的存储过程。

2.2 getNumRowsProcessed

接下来是本文所介绍的第三个函数:getNumRowsProcessed(),它的主要作用是用于获取句柄关联的查询语句中被处理用于生成XML格式文本的行数,即只统计被处理生成xml格式,因此这个函数只会被setmaxrows,setskiprows以及生成xml格式文本所影响,这个函数可以使得使用者在最后调用时了解到生成的XML格式文本与查询结果之间的差异性,帮助使用者更好的自定义xml格式文本数据,它的具体语法如下所示:

function getNumRowsProcessed(ctxhdl in ctxHandle)  return number;

这个函数的传参只有一个参数即dbms_xmlquery包中声明的句柄类型,这是因为这个函数的作用是用于统计当前的上下文句柄中有多少行查询结果被处理生成xml格式文本,因此在setmaxrows中未被处理的行不会被统计在内,同样的setskiprows中被跳过的行数也不会被统计处理。

函数使用技巧

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

declare

    ctx dbms_xmlquery.ctxtype;

  xml clob;

begin

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

  dbms_xmlquery.setskiprows(ctx,1);

  dbms_xmlquery.setMAXrows(ctx,1);

  xml := dbms_xmlquery.getxml(ctx);

  dbms_output.put_line(xml);

  dbms_xmlquery.closecontext(ctx);

end;

在上面的PL/SQL执行块中,我们将一个查询结果提供给了额一个句柄类型,并根据自定义的设置了跳过行数与最大处理行数,在结束后关闭了这个句柄类型。这样XML中就存放了我们表的查询结果集到XML数据映射的结果集。下面的图1是原有情况下正常的查询结果生成的xml格式文本数据,图2和图3分别是设置了最大行数与跳过行数生成的xml格式文本。

图 1 原有情况下的xml结果

图 2 执行setMAXrows过程XML结果

图 3 执行setSkiprows过程XML结果

根据图1与图2,图3的对比可以看出执行不同的set过程之间的差异,那么就可以更根据这些存储过程之间的关系来自定义生成xml格式文本,值得一提的是,这些存储过程无论在一个PL/SQL块中调用多少次,只要在没有调用getxml函数之前,其结果设置都值只保留最后一次的行为。

总结

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

参考资料

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值