更新时间:2024-05-07 GMT+08:00

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()语法方式调用。

      示例:

      1
      2
      3
      4
      5
      gaussdb=# SELECT xmltype.createxml('<a>123</a>');
       createxml  
      ------------
       <a>123</a>
      (1 row)
      
    • 本章内入参为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])

    描述: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 := '<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])

    描述: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('<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])

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

    参数:第一个参数要转换成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])

    描述: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 := '<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])

    描述: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('<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转化为字符串。

    参数:需要转换的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的根元素。

    参数:需要获取根元素的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顶层元素的命名空间。

    参数:需要获取命名空间的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)