关键字:
KingbaseES、XML、数据转换、人大金仓、KingbaseES
概述
在目前的KingbaseES的使用过程中,我们会遇到数据库需要存储XML格式的数据,或者需要对查询的数据进行转换的问题,XML格式的数据类似于HTML格式数据,XML是一种扩展标记语言,最早于1998年被引入软件工业界,它不仅可以在WEB前端使用还可以应用于后端数据处理以及数据库存储等。
那么如何使用KingbaseES数据库对XML格式的数据进行读取,或者说如何使用KingbaseES数据库对我们查询到的结果转换为XML数据格式,从而方便我们后续的一些处理如:前后端系统间的交互等,那就不得不提到KingbaseES数据库所带有的cursor_to_xml函数了。
cursor_to_xml
cursor_to_xml函数是KingbaseES所提供的一个用于将包含有查询结果的游标转换为xml数据函数,由于接受的入参是游标,所以在使用这个函数前,我们需要定义一个游标,并且这个游标内需要有相应的查询结果,当然即使没有查询结果我们也可以生成一个XML数据,但一般空的XML数据是没有意义的,在Oracle中包含有是否将空XML数据类型当做错误抛出的过程,虽然在KingbaseES中并没有设置这一过程,但我们还是希望在使用这个函数的过程中尽量是将有内容的游标作为参数传入其中。
那么接下来使用这个函数首先第一步就需要了解它的入参和返回值类型,这个函数的语法如下所示:
cursor_to_xml(cursor refcursor, count int, nulls boolean,tableforest boolean, targetns text) return xmlType;
从上面的函数表达式可以看到,这个函数的入参共有5个,其中cursor就是我们需要传入函数的游标,可以看到它的后面紧跟着类型名refcursor;
第二个参数count是一个int类型的参数,它就是我们需要传入的转换行数,顾名思义:转换行数就是我们需要将这个传入游标的查询结果多少行进行处理,通过这个值我们就可以自定义那些查询结果是我们需要进行转换的,那些事不需要转换的;
而第三个参数nulls则表达为一个bool类型,这个参数的意义表达为:是否存在null值,是否需要将null值显示处理等,这个参数就是将我们游标查询结果中的null的一个处理方式,如果为false,那么我们会默认不显示null值,如果为true就会显示一个null值为true,这个参数在一般的使用过程中我们只需要把他定义为false就可以了,这是因为null值在查询过程中就是标识无意义的值,一般在查询中也不显示null值;
第四个参数为tableforset,这个参数也是一个bool类型的参数,它表示我们生成的XML数据的样式类型,XML数据在一般情况下都是严格具备开始和结束符,而这个参数则是确定我们是否需要全局的开始和结束符,即根部元素的开始符与结束符,在处理XML数据类型的过程中,我们可以了解到,XML数据本质上是一种父子关联的树型结果,那么每个父可以有多个子,但一个子只能对应一个父,那么子树的结构就决定了XML数据中一定会有一个根元素是所有元素的父结构,但我们在调用函数的过程中,查询结果并不一定需要被包装为一个完备的XML数据,完备的XML数据就像一个被封装好的函数一样,它的开始标志与结束标志都被定义完整,我们不能对里边的内容进行随意的修改,一旦修改出现问题,它就不是一个合格的或是合法的XML数据类型,但为了延展XML数据类型的可扩展性,我们在cursor_to_xml函数中提供了tableforest参数用于自定义XML数据提供了可能性,那么当tableforest设置为true的时候,我们就会取消生成XML数据类型的根元素标识符,那么这时我们就可以将生成的XML数据进行组合或者其他外部操作,这就使得我们具备了更多的权限去操作XML类型的数据。
第五个参数是targetns,是一个text类型的参数,这个参数的主要作用是在KingbaseES的数据库实例中使用的,因为KingbaseES数据库具备强大的兼容能力,那么我们就可以在使用KingbaseES的过程中切换使用不同类型的数据库,比如KingbaseES兼容MYsql,兼容oracle,兼容SQLserver等功能,那么这几种数据库在本质上是不同的,其内部编码等都不相关,那么我们就可以进阶使用这个参数去调整生成XML格式所遵循的方式是哪一种类型的数据库,这个参数是我们提供的进阶参数,因此一般使用过程中,我们默认它为空就可以,除非我们需要制定生成的格式类型,或者当前的KingbaseES数据库模式是哪一种,我们可以调用这个参数来实现格式自定义操作。
那么上面介绍完了这个函数的入参类型,接下来就是这个函数的返回参数类型了,这个函数返回一个XML数据类型,即XMLtype,这个数据类型是KingbaseES所定义的一个数据类型,这个数据类型专门用于处理xml数据类型,那么我们就可以直接用这个返回值的类型进行一些其他的XML数据处理。
函数使用技巧
通过第二章节的介绍,我们大致了解了这个函数的具体参数以及函数返回类型的意义,那么在了解这些内容的基础上,我们就可以很好的实现这个函数的调用,这个函数由于是KingbaseES提供的一个传参函数,那么在使用时我们直接可以使用select语句进行调用,但是由于游标等变量的生命周期的设置,那么我们最好设置一个PL/SQL执行块来执行这个函数,具体的调用方法如下所示:
declare
cursor refcursor;
xml xmltype;
num number;
begin
select cursor_to_xml(cursor,num,false,false,null)
into xml
from dual;
end;
在上面的PL/SQL执行块中,我们将游标的查询结果通过cursor_to_xml函数传递给了我们的目标xml变量,通过执行一个虚拟表dual,这样xml中就存放了我们sql查询结果到XML数据映射的结果集。
总结
在KingbaseES数据库的使用过程中,我们总是要应对各式各样的数据类型以及各种类型之间的转换,而在对XML数据格式的处理中,KingbaseES提供了一个强大的函数cursor_to_xml来提供将sql查询结果到XML数据类型的转换。这样我们就可以直接将SQL查询的结果应用于其他的处理操作中。在使用过程中,我们任然需要加强对KingbaseES的探索,因为KingbaseES是一个强大的数据库管理系统,这里任然有许多强大的功能与特性值得我们去发现。




