华为云云数据库GaussDBXML类型函数_云淘科技

xmlparse ( { DOCUMENT | CONTENT } value [wellformed])

描述:使用函数xmlparse, 来从字符数据产生xml类型的值。

参数:数据类型为text

返回值类型:xml

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
gaussdb=# SELECT XMLPARSE (DOCUMENT 'Manual...');
                      xmlparse                         
----------------------------------------------------------
 Manual...
(1 row)
gaussdb=# SELECT XMLPARSE (CONTENT 'abcbarfoo');
          xmlparse             
---------------------------------
 abcbarfoo
(1 row)
gaussdb=# SELECT XMLPARSE (CONTENT 'abcbar</foo' wellformed);
     xmlparse
------------------
 abcbar</foo
(1 row)

xmlconcat(xml[, …])

描述:将由单个XML值组成的列表串接成一个单独的值,该值包含一个XML的内容片段。其中空值会被忽略,并且只有当所有参数都为空时结果才为空。在兼容ORA数据库模式下,设置a_format_version值为10c和a_format_dev_version值为s2,增加了校验输入片段是否为非良构xml文本。

参数:数据类型为XML。

返回值类型:XML

注:示例2为兼容ORA数据库的语法示例。

示例1:

gaussdb=# set xmloption=content;
SET
gaussdb=# select XMLCONCAT(('foo'),('foo')) ;
                             xmlconcat
-------------------------------------------------------------------
foofoo
(1 row)
gaussdb=# select XMLCONCAT('abc>');
 xmlconcat
-----------
 abc>
(1 row)

示例2:

gaussdb=# set a_format_version='10c';
SET
gaussdb=# set a_format_dev_version=s2;
SET
gaussdb=# set xmloption=content;
SET
gaussdb=# select XMLCONCAT(('foo'),('foo')) ;
                             xmlconcat
-------------------------------------------------------------------
foofoo
(1 row)
gaussdb=# select XMLCONCAT('abc>');
ERROR:  invalid XML document
LINE 1: SELECT XMLCONCAT('abc>');                     
DETAIL:  line 1: Start tag expected, '<' not found
CONTEXT:  referenced column: xmlconcat

xmlagg(xml [order_by_clause])

描述:该函数是一个聚集函数、它将聚集函数调用的输入值串接起来,且支持跨行串接,order_by_clause详见SELECT。在兼容ORA数据库模式下,设置a_format_version值为10c和a_format_dev_version值为s2,数据库xmloption参数默认为content,当xmloption设置为document时,使用换行符串接多行xml。若xml声明中encoding属性值不为默认编码UTF-8时,聚集结果有xml声明。

参数:xml

返回值类型:xml

注:示例2为兼容ORA数据库的语法示例。

示例1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
gaussdb=# CREATE TABLE xmltest (
            id int,
            data xml
           );
NOTICE:  The 'DISTRIBUTE BY' clause is not specified. Using 'id' as the distribution column by default.
HINT:  Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
gaussdb=# INSERT INTO xmltest VALUES (1, 'one');
INSERT 0 1
gaussdb=# INSERT INTO xmltest VALUES (2, 'two');
INSERT 0 1
gaussdb=# SELECT xmlagg(data) FROM xmltest;
                xmlagg                
--------------------------------------
 onetwo
(1 row)

示例2:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
gaussdb=# set xmloption=document;
SET
gaussdb=# SELECT xmlagg(data) FROM xmltest;
       xmlagg       
--------------------
 one+
 two
(1 row)
gaussdb=# DELETE FROM XMLTEST;
DELETE 2
gaussdb=# INSERT INTO xmltest VALUES (1, 'one');
INSERT 0 1
gaussdb=# INSERT INTO xmltest VALUES (2, 'two');
INSERT 0 1
gaussdb=# SELECT xmlagg(data) FROM xmltest;
                         xmlagg                         
--------------------------------------------------------
 one+
 two
(1 row)
gaussdb=# SELECT xmlagg(data order by id desc) FROM xmltest;
                         xmlagg                         
--------------------------------------------------------
 two+
 one
(1 row)

xmlelement( [ ENTITYESCAPING | NOENTITYESCAPING ] { [ NAME ] element_name | EVALNAME element_name } [ , xmlattributes( [ ENTITYESCAPING | NOENTITYESCAPING ] value [ [ AS ] attname | AS EVALNAME attname ] [ , … ] ) ] [ , content [ [ AS ] alias ] [ , … ] ] )

描述:使用给定的名称、属性和内容产生一个XML元素。

返回值类型:xml

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
gaussdb=# SELECT xmlelement(name foo);
 xmlelement
------------
 

在ORA兼容模式下:
1.xmlelement中默认不设置或者设置ENTITYESCAPING关键字时,xmlelement的内容中的保留字符将被转义:
SELECT xmlelement("entityescaping", 'a$><&"b');
                         xmlelement                          
-------------------------------------------------------------
 <entityescaping>a$><&"b</entityescaping>
(1 row)

SELECT xmlelement(entityescaping "entityescaping", 'a$><&"b');
                         xmlelement                          
-------------------------------------------------------------
 <entityescaping>a$><&"b</entityescaping>
(1 row)

2.xmlelement中设置NOENTITYESCAPING关键字时,xmlelement的内容中的保留字符将不会被转义:
SELECT xmlelement(noentityescaping "entityescaping", 'a$><&"b');
                  xmlelement                  
----------------------------------------------
 <entityescaping>a$><&"b</entityescaping>
(1 row)

3.xmlelement中对内容使用[as] alias声明别名时,内容值类型必须为xml类型:
SELECT xmlelement("entityescaping", '' b);
ERROR:  argument of XMLELEMENT must be type xml, not type unknown
LINE 1: SELECT xmlelement("entityescaping", '' b);
                                              ^
CONTEXT:  referenced column: xmlelement

SELECT xmlelement("entityescaping", '' as b);
ERROR:  argument of XMLELEMENT must be type xml, not type unknown
LINE 1: SELECT xmlelement("entityescaping", '' as b);
                                              ^
CONTEXT:  referenced column: xmlelement

SELECT xmlelement("entityescaping", xml('') b);
                 xmlelement                  
---------------------------------------------
 <entityescaping></entityescaping>
(1 row)

SELECT xmlelement("entityescaping", xml('') as b);
                 xmlelement                  
---------------------------------------------
 <entityescaping></entityescaping>
(1 row)

4.xmlattributes中默认不设置或者设置ENTITYESCAPING关键字时,xmlattributes的内容中的保留字符将被转义:
SELECT xmlelement("entityescaping", xmlattributes('entityescaping' "entityescaping"));
                          xmlelement                           
---------------------------------------------------------------
 <entityescaping entityescaping="entityescaping<>"/>
(1 row)

SELECT xmlelement(name "entityescaping", xmlattributes(entityescaping 'entityescaping' "entityescaping"));
                          xmlelement                           
---------------------------------------------------------------
 <entityescaping entityescaping="entityescaping<>"/>
(1 row)

5.xmlattributes中设置NOENTITYESCAPING关键字时,xmlattributes的内容中的保留字符将不会被转义:
SELECT xmlelement("entityescaping", xmlattributes(noentityescaping 'entityescaping' "entityescaping"));
                       xmlelement                        
---------------------------------------------------------
 <entityescaping entityescaping="entityescaping"/>
(1 row)

xmlelement和xmlattributes的name字段赋NULL时,行为与O不一致。xmlelement的name字段赋NULL时,结果显示name信息为空,且不显示属性信息。xmlattributes的name字段赋NULL时,不显示属性信息。
设置如下两个参数后,xmlelement的内容转义规则为ORA兼容,未设置时xmlelement的内容转义规则为PG兼容。

1
2
set a_format_version='10c';
set a_format_dev_version=s2;

父主题: 函数和操作符

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家