XMLTYPE类型函数
- createxml(varchar2[,varchar2,numeric ,numeric])
描述:varchar2类型入参,静态方法创建xmltype类型。
参数:第一个参数要转换成xmltype的字符串(必传字段),第二个参数为用于使输入符合给定架构的可选架构URL(可选字段,默认为空,暂不生效),第三个参数为指示实例根据给定的XML架构有效的标志(可选字段,默认为0,暂不生效),第四个参数为是否为良构的标识(可选字段,默认为0,暂不生效)。
返回值类型:xmltype
示例:1 2 3 4 5
gaussdb=# SELECT createxml('<a>123</a>'); createxml -------------- <a>123</a> (1 row)
- 与A数据库差异:在PL/SQL中,createxml允许入参为空串,并返回NULL。
- 字符串encoding只支持UTF-8、GBK、LATIN1~LATIN10,version字段只支持1.x。
- createxml支持以xmltype.createxml()语法方式调用。
- 本章内入参为xmltype的函数支持以xmltype().func()的方式调用,会将前一项返回的xmltype类型当作入参传入后一项的函数内,该语法支持多层嵌套(用户自定义函数入参为xmltype不支持该语法)。
示例:
1 2 3 4 5
gaussdb=# select xmltype('<a>123<b>456</b></a>').extract('/a/b').getstringval(); xmltypefunc ------------- <b>456</b> (1 row)
上述用例实际效果与函数嵌套一致:1 2 3 4 5
gaussdb=# select getstringval(extractxml(xmltype('<a>123<b>456</b></a>'),'/a/b')); getstringval -------------- <b>456</b> (1 row)
- 存储过程内支持xmltype类型的变量以a.func()方式调用函数,该语法支持一层嵌套。
1 2 3 4 5 6 7 8 9 10
gaussdb=# declare a xmltype; b varchar2; begin a:=xmltype('<a>123<b>456</b></a>'); b:=a.getstringval(); RAISE NOTICE 'xmltype_str is : %',b; end; / NOTICE: xmltype_str is : <a>123<b>456</b></a>
- createxml(clob [,varchar2,numeric ,numeric])
参数:第一个参数要转换成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 := '<a>123</a>'; xmltype_obj := createxml(xmltype_clob); xmltype_str := xmltype_obj.getstringval(); RAISE NOTICE 'xmltype_str is : %',xmltype_str; end; / NOTICE: xmltype_str is : <a>123</a>
clob类型参数入参最大支持1GB-1。
- createxml(blob, numeric [,varchar2,numeric ,numeric])
参数:第一个参数要转换成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('<a>123</a>').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 : <?xml version="1.0" encoding="UTF8"?> <a>123</a>
- 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('<asd/>'),7); getblobval ------------------------------------------------------------------------------------------ 3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D2255544638223F3E0A3C6173642F3E (1 row)
xmltype().func()方式:1 2 3 4 5
gaussdb=# select xmltype('<asd/>').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('<a>123</a>')); getclobval -------------- <a>123</a> (1 row)
xmltype().func()方式:1 2 3 4 5
gaussdb=# SELECT xmltype('<a>123</a>').getclobval(); xmltypefunc -------------- <a>123</a> (1 row)
- getnumberval(xmltype)
描述:将xmltype类型转化成numeric类型,支持xmltype().func()方式调用。
参数:入参为xmltype类型。
返回值类型:numeric
示例:1 2 3 4 5
gaussdb=# SELECT getnumberval(xmltype('<a>123</a>').extract('/a/text()')); getnumberval -------------- 123 (1 row)
xmltype().func()方式:1 2 3 4 5
gaussdb=# SELECT xmltype('<a>123</a>').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('<a>123</a>')); isfragment -------------- 0 (1 row)
xmltype().func()方式:1 2 3 4 5
gaussdb=# SELECT xmltype('<a>123</a>').isfragment(); xmltypefunc -------------- 0 (1 row)
- xmltype(varchar2[,varchar2,numeric ,numeric])
参数:第一个参数要转换成xmltype的字符串(必传字段),第二个参数为用于使输入符合给定架构的可选架构URL(可选字段,默认为空,暂不生效),第三个参数为指示实例根据给定的XML架构有效的标志(可选字段,默认为0,暂不生效),第四个参数为是否为良构的标识(可选字段,默认为0,暂不生效)。
返回值类型:xmltype
示例:1 2 3 4 5
gaussdb=# SELECT xmltype('<a>123</a>'); xmltype -------------- <a>123</a> (1 row)
- 与A数据库差异:在PL/SQL中,xmltype允许入参为空串,并返回NULL。
- 字符串encoding只支持UTF-8、GBK、LATIN1~LATIN10,version字段只支持1.x。
- xmltype(clob [,varchar2,numeric ,numeric])
参数:第一个参数要转换成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 := '<a>123</a>'; xmltype_obj := xmltype(xmltype_clob); xmltype_str := xmltype_obj.getstringval(); RAISE NOTICE 'xmltype_str is : %',xmltype_str; end; / NOTICE: xmltype_str is : <a>123</a>
clob类型参数入参最大支持1GB-1。
- xmltype(blob, numeric [,varchar2,numeric ,numeric])
参数:第一个参数要转换成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('<a>123</a>'),7); xmltype_obj := xmltype(xmltype_blob,7); xmltype_str := xmltype_obj.getstringval(); RAISE NOTICE 'xmltype_str is : %',xmltype_str; end; / NOTICE: xmltype_str is : <?xml version="1.0" encoding="UTF8"?> <a>123</a>
- blob类型参数入参最大支持256MB-1。
- 字符集id取值范围为1~41。
- getstringval(xmltype)
参数:需要转换的xmltype。
返回值类型:varchar2
getstringval函数有两种调用方式。
示例1:
gaussdb=# SELECT getstringval('<a>123<b>456</b></a>'); getstringval ---------------------- <a>123<b>456</b></a> (1 row)
示例2:调用方式兼容ORA的语法。
gaussdb=# SELECT xmltype('<a>123<b>456</b></a>').getstringval(); xmltypefunc ---------------------- <a>123<b>456</b></a> (1 row)
- getrootelement(xmltype)
参数:需要获取根元素的xmltype。
返回值类型:varchar2
getrootelement函数有两种调用方式。
示例1:
gaussdb=# SELECT getrootelement('<a>123<b>456</b></a>'); getrootelement ---------------- a (1 row)
示例2:调用方式兼容ORA的语法。
gaussdb=# SELECT xmltype('<a>123<b>456</b></a>').getrootelement(); xmltypefunc ------------- a (1 row)
- getnamespace(xmltype)
参数:需要获取命名空间的xmltype。
返回值类型:varchar2
getnamespace函数有两种调用方式。
示例1:
gaussdb=# SELECT getnamespace('<c:a xmlns:c="asd">123<d:b xmlns:d="qwe">456</d:b></c:a>'); getnamespace -------------- asd (1 row)
示例2:调用方式兼容ORA的语法。
gaussdb=# SELECT xmltype('<c:a xmlns:c="asd">123<d:b xmlns:d="qwe">456</d:b></c:a>').getnamespace(); xmltypefunc ------------- asd (1 row)
- existsnode(xmltype, varchar2[, varchar2])
描述:此函数根据xpath表达式判断在xmltype中是否存在该xml节点,如果存在返回1,否则返回0。
参数:被查询的xmltype,查询的xpath节点路径,xpath路径的命名空间(在入参有命名空间时,xpath和命名空间都需要定义别名,如示例3)。
返回值类型:numeric
existsnode函数有两种调用方式。
示例1:
gaussdb=# SELECT existsnode('<a>123<b>456</b></a>','/a/b'); existsnode ------------ 1 (1 row)
示例2:调用方式兼容ORA的语法。
gaussdb=# SELECT xmltype('<a>123<b>456</b></a>').existsnode('/a/b'); xmltypefunc ------------- 1 (1 row)
示例3:
gaussdb=# SELECT existsnode('<a:b xmlns:a="asd">123<c>456</c></a:b>','/a:b/c','xmlns:a="asd"'); existsnode ------------ 1 (1 row)
示例4:调用方式兼容ORA的语法。
gaussdb=# SELECT xmltype('<a:b xmlns:a="asd">123<c>456</c></a:b>').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函数有两种调用方式。
示例1:
gaussdb=# SELECT extractxml('<a>123<b>456</b></a>','/a/b'); extractxml ------------ <b>456</b> (1 row)
示例2:调用方式兼容ORA的语法
gaussdb=# SELECT xmltype('<a>123<b>456</b></a>').extract('/a/b'); xmltypefunc ------------- <b>456</b> (1 row) gaussdb=# SELECT xmltype('<a>123<b>456</b></a>').extractxml('/a/b'); xmltypefunc ------------- <b>456</b> (1 row)
示例3:
gaussdb=# SELECT extractxml('<a:b xmlns:a="asd">123<c>456</c></a:b>','/a:b','xmlns:a="asd"'); extractxml ---------------------------------------- <a:b xmlns:a="asd">123<c>456</c></a:b> (1 row)
示例4:调用方式兼容ORA的语法。
gaussdb=# SELECT xmltype('<a:b xmlns:a="asd">123<c>456</c></a:b>').extract('/a:b','xmlns:a="asd"'); xmltypefunc ---------------------------------------- <a:b xmlns:a="asd">123<c>456</c></a:b> (1 row) gaussdb=# SELECT xmltype('<a:b xmlns:a="asd">123<c>456</c></a:b>').extractxml('/a:b','xmlns:a="asd"'); xmltypefunc ---------------------------------------- <a:b xmlns:a="asd">123<c>456</c></a:b> (1 row)