做设计的一般用什么网站找素材,创建网站主题在哪里,洛阳网站建设价格,wordpress阿树1. 背景
OceanBase的Oracle模式当前已实现对XMLType类型的支持#xff0c;不仅包含了基本的构造、查询、更新以及格式转换功能#xff0c;还支持使用Xpath查询从XML数据中提取特定值。在V 4.2.2 版本中#xff0c;我们进一步扩展了Oracle模式下对XMLType的支持#xff0c;…1. 背景
OceanBase的Oracle模式当前已实现对XMLType类型的支持不仅包含了基本的构造、查询、更新以及格式转换功能还支持使用Xpath查询从XML数据中提取特定值。在V 4.2.2 版本中我们进一步扩展了Oracle模式下对XMLType的支持新增了通过XMLTable将XML数据转换为关系表的能力同时提供了在XML中删除和插入特定片段的功能。此外OB在MySQL模式下也提供了与MySQL 8.0相同的XML表达式。
关于Json本期特性在 MySQL模式下补充了JSON Schema的校验能力MySQL模式已经支持了MySQL 8.0的所有Json表达式此外在OB-Oracle模式下补充了PL下的JSON_ARRAY_T类型。 1.1. XML部分
特性1: 将XML数据从半结构化数据转为结构化数据
新增XMLTABLE、XMLSEQUENCE两个表达式在原来增删改查的基础上拓展了XML功能。
XMLTABLE能力包括
数据抽取能力。
XMLTABLE中可以指定父xpath抽取所需数据。
半结构化数据结构化能力。
XMLTABLE可以将XML数据的各个部分映射到虚拟表的行和列中生成一个结构化的表信息方便查询。也可以将生成的虚拟表插入到新表或者视图中。 XMLSEQUENCE将一个XML中的顶层原元素放到一个数组中结合Table函数也可实现部分XMLTABLE的能力。 特性2: 补充对XML内容修改的能力
插入 INSERTCHILDXML在XML内容中插入指定XML片段删除 DELETEXML删除指定XML片段。 特性3: MySQL模式下的XML功能
补充MySQL的XML表达式功能EXTRACTVALUE、UPDATEXML。
1.2. JSON部分
特性1: JSON SCHEMA功能支持
新增JSON SCHEMA相关2个表达式JSON_SCHEMA_VALID和JSON_SCHEMA_VALIDATION_REPORT。使用JSON SCHEMA 验证输入的JSON数据是否符合要求。 特性2: JSON表达式补齐
补充JSON_ARRAY_T、JSON_ARRAY_APPEND表达式。 2. 使用操作
2.1. 本次特性支持的表达式总览
模块表达式名称功能简述MySQLJSON_SCHEMA_VALID符合SCHEMA则返回true不符合则返回false。JSON_SCHEMA_VALIDATION_REPORT返回JSON SCHEMA验证报告验证报告为JSON格式。OracleINSERTCHILDXML插入孩子节点到XML中。DELETEXML删除xpath表达式再XML中匹配的一个或多个节点。MySQLEXTRACTVALUE依据Xpath抽取一个XML片段返回文本内容。UPDATEXML更新指定XML。MySQLJSON_ARRAY_APPEND追加值到指定路径所指向的JSON数据的末尾并返回追加后的结果。OracleXMLTABLE将 Xpath 返回的结果映射到关系表的行和列中。OracleXMLSEQUENCE生成包含XML文档内容的XML array。OracleJSON_ARRAY_T生成JSON_ARRAY_T类型并提供相关udf使用
2.2. JSON SCHEMA表达式
JSON SCHEMA 是描述 JSON 格式的一个标准模板用于验证输入的JSON数据是否符合要求。JSON SCHEMA 本身也是一个 JSON数据且一定是Object类型。使用Json Schema进行校验时会同步遍历Schema和校验数据根据遍历到的数据对应的规范去检验是否符合要求。
2.2.1. JSON_SCHEMA_VALID
符合SCHEMA则返回true不符合则返回false。可用作列约束。
-- 符合JSON SCHEMA规范返回1 不符合则返回0
MySQL [mydb] SELECT JSON_SCHEMA_VALID({type: string}, JSON_doc);
-------------------------------------------------------
| JSON_SCHEMA_VALID({type: string}, JSON_doc) |
-------------------------------------------------------
| 1 |
-------------------------------------------------------
1 row in set (0.00 sec)2.2.2. JSON_SCHEMA_VALIDATION_REPORT
返回验证报告验证报告为JSON格式
MySQL [mydb] SELECT JSON_SCHEMA_VALIDATION_REPORT({type: string}, JSON_doc);
-------------------------------------------------------------------
| JSON_SCHEMA_VALIDATION_REPORT({type: string}, JSON_doc) |
-------------------------------------------------------------------
| {valid: true} |
-------------------------------------------------------------------
1 row in set (0.00 sec)
2.3. Table相关表达式
2.3.1. Oracle XMLTABLE
XMLTABLE将 Xpath 返回的结果映射到关系行和列中。您可以使用 SQL 将函数返回的结果作为虚拟关系表进行查询。
OceanBase(SYSSYS)SELECT * FROM - XMLTABLE(/ROWS/ROW - passing XMLtype(- ROWS ROW id20 COUNTRY_IDEG/COUNTRY_ID COUNTRY_NAMEEgypt/COUNTRY_NAME REGION_ID1/REGION_ID /ROW /ROWS)) XMLTABLE;
---------------------------------------------------------------------------------------------------------------------
| COLUMN_VALUE |
---------------------------------------------------------------------------------------------------------------------
| ROW id20COUNTRY_IDEG/COUNTRY_IDCOUNTRY_NAMEEgypt/COUNTRY_NAMEREGION_ID1/REGION_ID
/ROW|
---------------------------------------------------------------------------------------------------------------------
1 row in set (0.005 sec)
2.3.2. Oracle XMLSEQUENCE
返回一个varray其中包括输入XML数据的所有顶层节点。
OceanBase(SYSSYS)SELECT rownum,- column_value- FROM TABLE(XMLSEQUENCE(extract(XMLtype(Videogame TypeRacing/Type NameNFS Most Wanted/Name Version2.0/Version Size5.5 GB/Size /Videogame),/Videogame/*)));
---------------------------------------
| ROWNUM | COLUMN_VALUE |
---------------------------------------
| 1 | TypeRacing/Type|
| 2 | NameNFS Most Wanted/Name|
| 3 | Version2.0/Version|
| 4 | Size5.5 GB/Size|
---------------------------------------
4 rows in set (0.051 sec)
2.4. 修改XML数据的表达式
2.4.1. Oracle INSERTCHILDXML
在xpath指定的位置插入孩子节点到XML中。
OceanBase(SYSSYS)select INSERTCHILDXML(XMLtype(- bookstorebook attold/book authorcarrot/author /bookstore), - /bookstore, - price, - XMLtype(price99.9/price)) - as result from dual;
-----------------------------------------------------------------------------------------------
| RESULT |
-----------------------------------------------------------------------------------------------
| bookstorebook attold/authorcarrot/authorprice99.9/price
/bookstore|
-----------------------------------------------------------------------------------------------
1 row in set (0.007 sec)
2.4.2. Oracle DELETEXML
删除xpath表达式在XML中匹配的一个或多个节点。
OceanBase(SYSSYS)select DELETEXML(XMLtype(bookstore book attold/book authorcarrot/author /bookstore), - /bookstore/author)- as result- from dual;
-----------------------------------------------
| RESULT |
-----------------------------------------------
| bookstorebook attold/
/bookstore|
-----------------------------------------------
1 row in set (0.006 sec)
2.4.3. MySQL EXTRACTVALUE
依据Xpath抽取一个XML片段返回文本内容。
OceanBase(roottest)select EXTRACTVALUE(abx/bby/b/a, /a/b) ;
-------------------------------------------------
| EXTRACTVALUE(abx/bby/b/a, /a/b) |
-------------------------------------------------
| x y |
-------------------------------------------------
1 row in set (0.003 sec)
2.4.4. MySQL UPDATEXML
将XML中被Xpath指定的部分替换为新值。
OceanBase(roottest)select UPDATEXML(a/b/, /a, xcarrot/x);
----------------------------------------------
| UPDATEXML(a/b/, /a, xcarrot/x) |
----------------------------------------------
| xcarrot/xb/b |
----------------------------------------------
1 row in set (0.003 sec)
2.5. 修改JSON数据的表达式
2.5.1. JSON_ARRAY_APPEND
JSON_APPEND用于追加值到指定路径所指向的JSON数据的末尾并返回追加后的结果。如果是数组将追加到数组的最后如果是非数组则会自动生成一个JSON array并返回结果。
SET j [a, [b, c], d];
SELECT JSON_APPEND(j, $[1], 1);
----------------------------------
| JSON_APPEND(j, $[1], 1) |
----------------------------------
| [a, [b, c, 1], d] |
---------------------------------- 2.6. Oracle JSON表达式
2.6.1. JSON_ARRAY_T
2.6.1.1. 构造函数
构造JSON_ARRAY_T
declarejo JSON_ARRAY_T;
beginjo : JSON_ARRAY_T([123]);dbms_output.put_line(jo.to_String);
end;
/
2.6.1.2. 通过下标获取元素
declarejo JSON_ARRAY_T;jo_val JSON_ELEMENT_T;
beginjo : JSON_ARRAY_T.parse([123,{abc:456},[789], true, null,test]);FOR I IN 0 .. 5 LOOPjo_val : jo.get(i);dbms_output.put_line(jo_val.to_String);END LOOP;
end;
/
3. 未来规划
Oracle模式下基于高频用户场景进一步补充 XML和Json能力如PL下的XMLGENXMLDOM package。MySQL模式下的XMLJSON表达式能力已经与MySQL 8.0完全对齐MySQL模式下的JSON多值索引已在近期规划中未来也有计划对JSON场景做进一步的性能优化。