人大金仓数据库KingbaseES 兼容Oracle包dbms_xmlgen的SETSKIPROWS过程使用介绍

金仓数据库KingbaseES 兼容Oracle包dbms_xmlgen的SETSKIPROWS过程使用介绍

关键字:

KingbaseES、xml、dbms_xmlgen、SETSKIPROWS、人大金仓、KingbaseES

一、SETSKIPROWS功能概述

兼容Oracle包dbms_xmlgen的功能是通过SQL查询将关系表中数据转化为XML文档。转化方式一共有两种:(1)通过查询字符串直接转化。(2)通过上下文句柄转化。对于通过查询字符串直接转化的方式,无法跳过若干行进行查询,只能直接将表格中的所有数据转化为XML文档。而对于通过上下文句柄进行转化的方式,可以通过上下文句柄对需要跳过的行数进行设置,输入上下文句柄,调用GETXML或GETXMLTYPE函数就可以获得跳过若干行之后的XML文档。在dbms_xmlgen包中,设置跳过的行数的过程为:SETSKIPROWS过程。该过程的语法如下:

procedure setSkipRows(ctx in ctxHandle,skipRows in number);

其中,ctx为上下文句柄,可以通过dbms_xmlgen包中的newcontext函数创建。skipRows为需要跳过的行数,其数据类型为number类型,在该过程中,该参数的实际范围为0~2^31-1,如果该参数值输入为小数,则按照向下取整的方式处理,也就是说,输入1.8行按照跳过1行来处理。如果该参数值输入为NULL,则会默认跳过的行数为0。如果设置的跳过的行数大于表格中实际的行数,使用GETXML或GETXMLTYPE函数获取的XML文档则为空。

二、使用示例

SETSKIPROWS过程示例使用的数据如下所示。表格test1用于查询,其中的查询结果用于转化为XML文档。表格xml_test用于存放生成的XML文档。dbms_xmlgen包依赖于kdb_xmltype插件,因此,在创建dbms_xmlgen包之前,还需要创建kdb_xmltype插件。

create extension kdb_xmltype;

create extension dbms_xmlgen;

create table test1 (id int,name text);

create table xml_test (result CLOB);

insert into test1 values(1,'aaa'),(2,'bbb'),(3,NULL);

示例一:使用setmaxrows过程设置最大处理的行数为1行,调用getxml函数获取包含1行数据的XML文档,然后使用setskiprows过程设置跳过的行数为1行,在调用getxml函数的时候,将会跳过第2行,提取第3行数据并将其转化为XML文档。

\set SQLTERM /

declare

lcontext dbms_xmlgen.ctxhandle;

lxmldata CLOB;

begin

lcontext := dbms_xmlgen.newcontext('select * from test1');

dbms_xmlgen.setmaxrows(lcontext,1);

lxmldata := dbms_xmlgen.getxml(lcontext);

insert into xml_test values(lxmldata);

dbms_xmlgen.setskiprows(lcontext,1);

lxmldata := dbms_xmlgen.getxml(lcontext);

insert into xml_test values(lxmldata);

dbms_xmlgen.closecontext(lcontext);

end;

/

\set SQLTERM ;

select * from xml_test;

result

-------------------------

<?xml version = "1.0"?>+

<rowset> +

<row> +

<id>1</id> +

<name>aaa</name> +

</row> +

</rowset> +

<?xml version = "1.0"?>+

<rowset> +

<row> +

<id>3</id> +

</row> +

</rowset> +

(2 rows)

实例二:重新启动查询之前设置的跳过的行数,重新启动查询之后,同样有效。

\set SQLTERM /

declare

lcontext dbms_xmlgen.ctxhandle;

lxmldata CLOB;

Begin

delete from xml_test;

lcontext := dbms_xmlgen.newcontext('select * from test1');

dbms_xmlgen.setmaxrows(lcontext,1);

dbms_xmlgen.restartquery(lcontext);

lxmldata := dbms_xmlgen.getxml(lcontext);

insert into xml_test values(lxmldata);

dbms_xmlgen.closecontext(lcontext);

end;

/

\set SQLTERM ;

select * from xml_test;

result

-------------------------

<?xml version = "1.0"?>+

<rowset> +

<row> +

<id>1</id> +

<name>aaa</name> +

</row> +

</rowset> +

<?xml version = "1.0"?>+

<rowset> +

<row> +

<id>2</id> +

<name>bbb</name> +

</row> +

</rowset> +

(2 rows)

相关文章

文章浏览阅读773次,点赞6次,收藏9次。【代码】c# json字符...
文章浏览阅读8.7k次,点赞2次,收藏17次。此现象一般定位到远...
文章浏览阅读2.8k次。mysql脚本转化为oracle脚本_mysql建表语...
文章浏览阅读2.2k次。cx_Oracle报错:cx_Oracle DatabaseErr...
文章浏览阅读1.1k次,点赞38次,收藏35次。本文深入探讨了Or...
文章浏览阅读1.5k次。默认自动收集统计信息的时间为晚上10点...