XMLType类型

PolarDB PostgreSQL版(兼容Oracle)支持XMLType复合类型,用于存储和操作XML数据。本文为您介绍该类型的定义、功能及其常用操作示例。

前提条件

支持的PolarDB PostgreSQL版(兼容Oracle)的版本如下:

  • Oracle语法兼容 2.0(内核小版本2.0.14.17.32.0及以上)

说明

您可在控制台查看内核小版本号,也可以通过SHOW polardb_version;语句查看。如未满足内核小版本要求,请升级内核小版本

静态函数与构造函数

  • 静态函数createXML:用于从字符串创建XMLType对象。函数原型如下:

    STATIC FUNCTION createXML(xmlData IN CLOB) RETURN XMLType
    STATIC FUNCTION createXML(xmlData IN VARCHAR2) RETURN XMLType
    STATIC FUNCTION createXML(xmlData IN CLOB, schema IN VARCHAR2, validated IN NUMBER := 0, wellFormed IN NUMBER := 0) RETURN XMLType
    STATIC FUNCTION createXML(xmlData IN VARCHAR2, schema IN VARCHAR2, validated IN NUMBER := 0, wellFormed IN NUMBER := 0) RETURN XMLType
  • 构造函数XMLType:与静态函数createXML同理,也用于从字符串创建XMLType对象。函数原型如下:

    CONSTRUCTOR FUNCTION XMLType(xmlData IN CLOB, schema IN VARCHAR2 := NULL, validated IN NUMBER := 0, wellFormed IN NUMBER := 0) RETURN SELF AS RESULT
    CONSTRUCTOR FUNCTION XMLType(xmlData IN VARCHAR2, schema IN VARCHAR2 := NULL, validated IN NUMBER := 0, wellFormed IN NUMBER := 0) RETURN SELF AS RESULT
说明

以上函数原型参数注意事项如下:

  • xmlData参数为XML字符串。

  • schema参数暂不支持,必须为NULL。

  • validated参数暂不支持,必须为0。

  • wellFormed参数用于控制XML格式检查,如果wellFormed0NULL,则xmlData必须为合法的XML文档,如果wellFormed为其他值,则不检查XML格式。

示例

  • 静态函数createXML

    DECLARE
        xml_doc XMLType;
    BEGIN
        xml_doc := XMLType.createXML('<root><name>Alice</name><age>30</age></root>');
        DBMS_OUTPUT.PUT_LINE(xml_doc.getStringVal());
    END;
    /

    返回结果如下:

    <root><name>Alice</name><age>30</age></root>
  • 构造函数XMLType

    DECLARE
        xml_doc XMLType;
    BEGIN
        xml_doc := XMLType('<root><name>Alice</name><age>30</age></root>');
        DBMS_OUTPUT.PUT_LINE(xml_doc.getStringVal());
    END;
    /

    返回结果如下:

    <root><name>Alice</name><age>30</age></root>

类型转换函数

XMLType复合类型支持一系列类型转换函数,用于将XMLType类型转换为其他类型,返回值类型就是转换的目标类型。函数类型如下:

  • getStringVal:将XMLType数据转换为VARCHAR2字符串。

    MEMBER FUNCTION getStringVal() RETURN VARCHAR2
  • getClobVal:将XMLType数据转换为CLOB字符串。

    MEMBER FUNCTION getClobVal() RETURN CLOB
  • getNumberVal:将XMLType数据转换为NUMBER数值。

    MEMBER FUNCTION getNumberVal() RETURN NUMBER

示例

DECLARE
    xml_doc XMLType;
    xml_clob CLOB;
BEGIN
    xml_doc := XMLType('<root><name>Alice</name><age>30</age></root>');
    xml_clob := xml_doc.getClobVal();
    DBMS_OUTPUT.PUT_LINE(xml_clob);
END;
/

返回结果如下:

<root><name>Alice</name><age>30</age></root>

extract函数

extract函数提取XML文档中的一部分数据,并以XMLType对象返回。函数原型如下:

MEMBER FUNCTION extract(xpath IN VARCHAR2) RETURN XMLType

示例

DECLARE
    xml_obj XMLType := XMLType.createXML('<root><name>Alice</name><age>30</age></root>');
    result XMLType;
BEGIN
    result := xml_obj.extract('/root/name');
    DBMS_OUTPUT.PUT_LINE(result.getStringVal()); -- 输出: <name>Alice</name>
END;
/

返回结果如下:

<name>Alice</name>