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

createxml(varchar2[,varchar2,numeric ,numeric])

描述:varchar2类型入参,静态方法创建xmltype类型。

参数:第一个参数要转换成xmltype的字符串(必传字段),第二个参数为用于使输入符合给定架构的可选架构URL(可选字段,默认为空,暂不生效),第三个参数为指示实例根据给定的XML架构有效的标志(可选字段,默认为0,暂不生效),第四个字段为是否为良构的标识(可选字段,默认为0,暂不生效)。

返回值类型:xmltype

示例:

1
2
3
4
5
gaussdb=# SELECT createxml('123');
 createxml
--------------
 123
(1 row)

与A数据库差异:在PL/SQL中,createxml允许入参为空串,并返回NULL。
字符串encoding只支持UTF-8、GBK、LATIN1~LATIN10,version字段只支持1.x。
createxml支持以xmltype.createxml()语法方式调用。

示例:

1
2
3
4
5
gaussdb=# SELECT xmltype.createxml('123');
 createxml  
------------
 123
(1 row)

本章内入参为xmltype的函数支持以xmltype().func()的方式调用,会将前一项返回的xmltype类型当作入参传入后一项的函数内,该语法支持多层嵌套(用户自定义函数入参为xmltype不支持该语法)。

示例:

1
2
3
4
5
gaussdb=# select xmltype('123456').extract('/a/b').getstringval();
 xmltypefunc 
-------------
 456
(1 row)

上述用例实际效果与函数嵌套一致:

1
2
3
4
5
gaussdb=# select getstringval(extractxml(xmltype('123456'),'/a/b'));
 getstringval 
--------------
 456
(1 row)

存储过程内支持xmltype类型的变量以a.func()方式调用函数,该语法支持一层嵌套。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
gaussdb=# declare
          a xmltype;
          b varchar2;
begin
          a:=xmltype('123456');
          b:=a.getstringval();
          RAISE NOTICE 'xmltype_str is : %',b;
end;
/
NOTICE:  xmltype_str is : 123456

createxml(clob [,varchar2,numeric ,numeric])

描述:clob类型入参,静态方法创建xmltype类型。

参数:第一个参数要转换成xmltype的clob对象(必传字段),第二个参数为用于使输入符合给定架构的可选架构URL(可选字段,默认为空,暂不生效),第三个参数为实例根据给定的XML架构有效的标志(可选字段,默认为0,暂不生效),第四个字段为是否为良构的标识(可选字段,默认为0,暂不生效)。

返回值类型:xmltype

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
gaussdb=# declare
 xmltype_clob clob;
 xmltype_obj xmltype;
 xmltype_str varchar2(1000);
begin
 xmltype_clob := '123';
 xmltype_obj := createxml(xmltype_clob);
 xmltype_str := xmltype_obj.getstringval();
 RAISE NOTICE 'xmltype_str is : %',xmltype_str;
end;
/
NOTICE:  xmltype_str is : 123

clob类型参数入参最大支持1GB-1

createxml(blob, numeric [,varchar2,numeric ,numeric])

描述:blob类型入参,静态方法创建xmltype类型。

参数:第一个参数要转换成xmltype的blob对象(必传字段),第二个参数为输入xml数据的字符集id,第三个参数为用于使输入符合给定架构的可选架构URL(可选字段,默认为空,暂不生效),第四个参数为实例根据给定的XML架构有效的标志(可选字段,默认为0,暂不生效),第五个字段为是否为良构的标识(可选字段,默认为0,暂不生效)。

返回值类型:xmltype

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
gaussdb=# declare
 xmltype_blob blob;
 xmltype_obj xmltype;
 xmltype_str varchar2(1000);
begin
 xmltype_blob := xmltype('123').getblobval(7);
 xmltype_obj := createxml(xmltype_blob,7);
 xmltype_str := xmltype_obj.getstringval();
 RAISE NOTICE 'xmltype_str is : %',xmltype_str;
end;
/
NOTICE:  xmltype_str is : 
123

blob类型参数入参最大支持256MB-1。
字符集id取值范围为1~41。

getblobval(xmltype, numeric)

描述:将xmltype类型转化成blob类型,支持xmltype().func()方式调用。

参数:第一个参数为xmltype类型,第二个参数为要转换的目标字符集的字符集id。

返回值类型:blob

示例:

1
2
3
4
5
gaussdb=# SELECT getblobval(xmltype(''),7);
                                        getblobval                                        
------------------------------------------------------------------------------------------
 3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D2255544638223F3E0A3C6173642F3E
(1 row)

xmltype().func()方式:

1
2
3
4
5
gaussdb=# select xmltype('').getblobVal(7);
                                       xmltypefunc                                        
------------------------------------------------------------------------------------------
 3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D2255544638223F3E0A3C6173642F3E
(1 row)

入参xmltype长度最大256MB-1。

getclobval(xmltype)

描述:将xmltype类型转化成clob类型,支持xmltype().func()方式调用。

参数:xmltype类型。

返回值类型:clob

示例:

1
2
3
4
5
gaussdb=# SELECT getclobval(xmltype('123'));
 getclobval
--------------
 123
(1 row)

xmltype().func()方式:

1
2
3
4
5
gaussdb=# SELECT xmltype('123').getclobval();
 xmltypefunc
--------------
 123
(1 row)

getnumberval(xmltype)

描述:将xmltype类型转化成numeric类型,支持xmltype().func()方式调用。

参数:入参为xmltype类型。

返回值类型:numeric

示例:

1
2
3
4
5
gaussdb=# SELECT getnumberval(xmltype('123').extract('/a/text()'));
 getnumberval
--------------
           123
(1 row)

xmltype().func()方式:

1
2
3
4
5
gaussdb=# SELECT xmltype('123').extract('/a/text()').getnumberval();
 xmltypefunc
--------------
           123
(1 row)

isfragment(xmltype)

描述:返回该xmltype类型是片段(1)还是文档(0),支持xmltype().func()方式调用。

参数:入参为xmltype类型。

返回值类型:numeric

示例:

1
2
3
4
5
gaussdb=# SELECT isfragment(xmltype('123'));
 isfragment
--------------
             0
(1 row)

xmltype().func()方式:

1
2
3
4
5
gaussdb=# SELECT xmltype('123').isfragment();
 xmltypefunc
--------------
             0
(1 row)

xmltype(varchar2[,varchar2,numeric ,numeric])

描述:varchar2类型创建xmltype类型。

参数:第一个参数要转换成xmltype的字符串(必传字段),第二个参数为用于使输入符合给定架构的可选架构URL(可选字段,默认为空,暂不生效),第三个参数为指示实例根据给定的XML架构有效的标志(可选字段,默认为0,暂不生效),第四个字段为是否为良构的标识(可选字段,默认为0,暂不生效)。

返回值类型:xmltype

示例:

1
2
3
4
5
gaussdb=# SELECT xmltype('123');
 xmltype
--------------
 123
(1 row)

与A数据库差异:在PL/SQL中,xmltype允许入参为空串,并返回NULL。
字符串encoding只支持UTF-8、GBK、LATIN1~LATIN10,version字段只支持1.x。

xmltype(clob [,varchar2,numeric ,numeric])

描述:clob类型创建xmltype类型。

参数:第一个参数要转换成xmltype的clob对象(必传字段),第二个参数为用于使输入符合给定架构的可选架构URL(可选字段,默认为空,暂不生效),第三个参数为实例根据给定的XML架构有效的标志(可选字段,默认为0,暂不生效),第四个字段为是否为良构的标识(可选字段,默认为0,暂不生效)。

返回值类型:xmltype

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
gaussdb=# declare
 xmltype_clob clob;
 xmltype_obj xmltype;
 xmltype_str varchar2(1000);
begin
 xmltype_clob := '123';
 xmltype_obj := xmltype(xmltype_clob);
 xmltype_str := xmltype_obj.getstringval();
 RAISE NOTICE 'xmltype_str is : %',xmltype_str;
end;
/
NOTICE:  xmltype_str is : 123

clob类型参数入参最大支持1GB-1。

xmltype(blob, numeric [,varchar2,numeric ,numeric])

描述:blob类型创建xmltype类型。

参数:第一个参数要转换成xmltype的blob对象(必传字段),第二个参数为输入xml数据的字符集id,第三个参数为用于使输入符合给定架构的可选架构URL(可选字段,默认为空,暂不生效),第四个参数为实例根据给定的XML架构有效的标志(可选字段,默认为0,暂不生效),第五个字段为是否为良构的标识(可选字段,默认为0,暂不生效)。

返回值类型:xmltype

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
gaussdb=# declare
 xmltype_blob blob;
 xmltype_obj xmltype;
 xmltype_str varchar2(1000);
begin
 xmltype_blob := getblobval(createxml('123'),7);
 xmltype_obj := xmltype(xmltype_blob,7);
 xmltype_str := xmltype_obj.getstringval();
 RAISE NOTICE 'xmltype_str is : %',xmltype_str;
end;
/
NOTICE:  xmltype_str is : 
123

blob类型参数入参最大支持256MB-1。
字符集id取值范围为1~41。

getstringval(xmltype)

描述:此函数将xmltype转化为字符串。

参数:需要转换的xmltype。

返回值类型:varchar2

getstringval函数有两种调用方式,其中示例2的调用方式兼容ORA的语法。

示例1:

gaussdb=# select getstringval('123456');
     getstringval
----------------------
 123456
(1 row)

示例2:

gaussdb=# select xmltype('123456').getstringval();
     xmltypefunc
----------------------
 123456
(1 row)

getrootelement(xmltype)

描述:此函数获取xmltype的根元素。

参数:需要获取根元素的xmltype。

返回值类型:varchar2

getrootelement函数有两种调用方式,其中示例2的调用方式兼容ORA的语法。

示例1:

gaussdb=# select getrootelement('123456');
 getrootelement
----------------
 a
(1 row)

示例2:

gaussdb=# select xmltype('123456').getrootelement();
 xmltypefunc
-------------
 a
(1 row)

getnamespace(xmltype)

描述:此函数获取xmltype顶层元素的命名空间。

参数:需要获取命名空间的xmltype。

返回值类型:varchar2

getnamespace函数有两种调用方式,其中示例2的调用方式兼容ORA的语法。

示例1:

gaussdb=# select getnamespace('123456');
 getnamespace
--------------
 asd
(1 row)

示例2:

gaussdb=# select xmltype('123456').getnamespace();
 xmltypefunc
-------------
 asd
(1 row)

existsnode(xmltype, varchar2[, varchar2])

描述:此函数根据xpath表达式判断在xmltype中是否存在该xml节点,如果存在返回1,否则返回0。

参数:被查询的xmltype,查询的xpath节点路径,xpath路径的命名空间(在入参有命名空间时,xpath和命名空间都需要定义别名,如示例3)。

返回值类型:numeric

existsnode函数有两种调用方式,其中示例2和示例4的调用方式兼容ORA的语法。

示例1:

gaussdb=# select existsnode('123456','/a/b');
 existsnode
------------
          1
(1 row)

示例2:

gaussdb=# select xmltype('123456').existsnode('/a/b');
 xmltypefunc
-------------
           1
(1 row)

示例3:

gaussdb=# select existsnode('123456','/a:b/c','xmlns:a="asd"');
 existsnode
------------
          1
(1 row)

示例4:

gaussdb=# select xmltype('123456').existsnode('/a:b/c','xmlns:a="asd"');
 xmltypefunc
-------------
           1
(1 row)

extractxml(xmltype, varchar2[, varchar2])

描述:此函数根据xpath表达式判断在xmltype中是否存在该xml节点,如果存在返回包含该节点的xmltype,如果不存在返回NULL。可以将返回值插入xmltype类型的表中。

参数:被查询的xmltype,查询的xpath节点路径,xpath路径的命名空间(在入参有命名空间时,xpath和命名空间都需要定义别名,如示例3)。

返回值类型:xmltype

extractxml函数有两种调用方式,其中示例2和示例4的调用方式兼容ORA的语法。

示例1:

gaussdb=# select extractxml('123456','/a/b');
 extractxml
------------
 456
(1 row)

示例2:

gaussdb=# select xmltype('123456').extract('/a/b');
 xmltypefunc
-------------
 456
(1 row)

gaussdb=# select xmltype('123456').extractxml('/a/b');
 xmltypefunc
-------------
 456
(1 row)

示例3:

gaussdb=# select extractxml('123456','/a:b','xmlns:a="asd"');
               extractxml
----------------------------------------
 123456
(1 row)

示例4:

gaussdb=# select xmltype('123456').extract('/a:b','xmlns:a="asd"');
              xmltypefunc
----------------------------------------
 123456
(1 row)

gaussdb=# select xmltype('123456').extractxml('/a:b','xmlns:a="asd"');
              xmltypefunc
----------------------------------------
 123456
(1 row)

父主题: 函数和操作符

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

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