KingbaseES 原生XML系列五--XML关系表函数

发布时间 2023-05-09 19:41:51作者: KINGBASE研究院

KingbaseES 原生XML系列五--XML关系表函数(QUERY_TO_XML,TABLE_TO_XML,XMLTABLE)

XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的一种公共语言。在不同平台下产生的信息,可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。
xml数据类型可以被用来存储XML数据。它比直接在一个text域中存储XML数据的优势在于,它会检查输入值的结构是不是良好,并且有支持函数用于在其上执行类型安全的操作。
本文详细介绍了KingbaseES中集成的相关xml关系表函数使用。

准备数据:

CREATE TABLE "public"."xmldata" (
    "id" integer NULL,
    "comm" varchar NULL,
    "xmlvarchar" varchar NULL,
    "xmldata" xml NULL,
    "XMLarray" xml NULL
);

INSERT INTO xmldata values(1, 'zhangsan' , '<kes>aaa</kes>' , '<kes><sql>sql001</sql><rac>rac001</rac></kes>' , '<kes><version>v8r3001</version><version>v8r6001</version></kes>');
INSERT INTO xmldata values(2, 'lisi' , '<kes>bbb</kes>' , '<kes><sql>sql002</sql><rac>rac002</rac></kes>' , '<kes><version>v8r3002</version><version>v8r6002</version></kes>');
INSERT INTO xmldata values(3, 'wangwu' , '<kes>ccc</kes>' , '<kes><sql>sql003</sql><rac>rac003</rac></kes>' , '<kes><version>v8r3003</version><version>v8r6003</version></kes>');

xml函数列表

json函数简介

QUERY_TO_XML

功能:

query_to_xml执行由参数query传递的查询并且映射结果集.

用法:

query_to_xml(query text, nulls boolean, tableforest boolean, targetns text)

示例:

test=#  select * from query_to_xml('select id , comm from xmldata' ,true ,true , 'kes') ; 
                              query_to_xml                               
-------------------------------------------------------------------------
 <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="kes">+
   <id>1</id>                                                           +
   <comm>zhangsan</comm>                                                +
 </row>                                                                 +
                                                                        +
 <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="kes">+
   <id>2</id>                                                           +
   <comm>lisi</comm>                                                    +
 </row>                                                                 +
                                                                        +
 <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="kes">+
   <id>3</id>                                                           +
   <comm>wangwu</comm>                                                  +
 </row>                                                                 +
                                                                        +

(1 行记录)

test=#  select * from query_to_xml('select id , comm from xmldata' ,false ,true , 'kes') ;
                              query_to_xml                               
-------------------------------------------------------------------------
 <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="kes">+
   <id>1</id>                                                           +
   <comm>zhangsan</comm>                                                +
 </row>                                                                 +
                                                                        +
 <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="kes">+
   <id>2</id>                                                           +
   <comm>lisi</comm>                                                    +
 </row>                                                                 +
                                                                        +
 <row xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="kes">+
   <id>3</id>                                                           +
   <comm>wangwu</comm>                                                  +
 </row>                                                                 +
                                                                        +

(1 行记录)

test=#  select * from query_to_xml('select id , comm from xmldata' ,true ,false , 'kes') ;
                               query_to_xml                                
---------------------------------------------------------------------------
 <table xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="kes">+
                                                                          +
 <row>                                                                    +
   <id>1</id>                                                             +
   <comm>zhangsan</comm>                                                  +
 </row>                                                                   +
                                                                          +
 <row>                                                                    +
   <id>2</id>                                                             +
   <comm>lisi</comm>                                                      +
 </row>                                                                   +
                                                                          +
 <row>                                                                    +
   <id>3</id>                                                             +
   <comm>wangwu</comm>                                                    +
 </row>                                                                   +
                                                                          +
 </table>                                                                 +

(1 行记录)

TABLE_TO_XML

功能:

table_to_xml映射由参数tbl传递的命名表的内容。regclass类型接受使用常见标记标识表的字符串,包括可选的模式限定和双引号。

用法:

table_to_xml(tbl regclass, nulls boolean, tableforest boolean, targetns text)

示例:

test=#  select * from tt;
 id | name 
----+------
 1  | a
 0  | b
 1  | a
 0  | A
 1  | a
(5 行记录)

test=# select * from table_to_xml('tt' , true , true , 'kes'); 
                              table_to_xml                              
------------------------------------------------------------------------
 <tt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="kes">+
   <id>1</id>                                                          +
   <name>a</name>                                                      +
 </tt>                                                                 +
                                                                       +
 <tt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="kes">+
   <id>0</id>                                                          +
   <name>b</name>                                                      +
 </tt>                                                                 +
                                                                       +
 <tt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="kes">+
   <id>1</id>                                                          +
   <name>a</name>                                                      +
 </tt>                                                                 +
                                                                       +
 <tt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="kes">+
   <id>0</id>                                                          +
   <name>A</name>                                                      +
 </tt>                                                                 +
                                                                       +
 <tt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="kes">+
   <id>1</id>                                                          +
   <name>a</name>                                                      +
 </tt>                                                                 +
                                                                       +

(1 行记录)


test=# select * from table_to_xml('tt' , true , false , 'kes'); 
                              table_to_xml                              
------------------------------------------------------------------------
 <tt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="kes">+
                                                                       +
 <row>                                                                 +
   <id>1</id>                                                          +
   <name>a</name>                                                      +
 </row>                                                                +
                                                                       +
 <row>                                                                 +
   <id>0</id>                                                          +
   <name>b</name>                                                      +
 </row>                                                                +
                                                                       +
 <row>                                                                 +
   <id>1</id>                                                          +
   <name>a</name>                                                      +
 </row>                                                                +
                                                                       +
 <row>                                                                 +
   <id>0</id>                                                          +
   <name>A</name>                                                      +
 </row>                                                                +
                                                                       +
 <row>                                                                 +
   <id>1</id>                                                          +
   <name>a</name>                                                      +
 </row>                                                                +
                                                                       +
 </tt>                                                                 +

(1 行记录)

XMLTABLE

功能:

XMLTable将 XQuery 评估的结果映射到相关的行和列。

用法:

XMLTABLE([XML_namespaces_clause,] XQuery_string XMLTABLE_option)
XMLnamespaces_clause:
XMLNAMESPACES({[string AS identifier|DEFAULT sting]}[,...])
**注意:** 您最多可以指定一个DEFAULT string子句。
XMLTABLE_options:
[XML_passing_clause][RETURNING SEQUENCE BY REF][COLUMN XML_table_column [,...]]
XML_passing_clause:
PASSING [BY VALUE] (expr [ as indentifier ])[,...]
XML_table_column:
column {FOR ORDINALITY|{datatype|XMLTYPE[(SEQUNCE) BY REF ]}[PATH string][DEFALUT]}

示例:

test=# select t.* from xmldata , xmltable('/kes' passing  xmldata columns c1 text path 'sql' , c2 text path 'rac') t ;
   c1   |   c2   
--------+--------
 sql001 | rac001
 sql002 | rac002
 sql003 | rac003
(3 行记录)