JSON作为一种轻量化的数据传输格式,被广泛地应用在各种系统之间。Oracle Database在之前的版本当中就对JSON有了很好的支持,在Oracle Database20c当中,对JSON做出了更多的支持,比如native JSON数据类型,这将会使程序员操作Oracle数据库中的JSON数据变得更加容易。我们今天将通过实际操作的方式为您介绍如下4方面内容:
存储JSON在数据库表中
查询JSON数据
创建索引以加速查询
从关系表中生成JSON数据
除非程序需要,我们还是建议大家使用关系型数据库作为常规的数据存储。在Oracle Database 20c之前,我们建议大家使用VARCHAR2作为少于4000(或者32767,如果你开启了extended数据类型的话)字节的JSON数据存储,如果存储的数据较大,建议大家使用BLOB进行存储。为什么不使用CLOB呢?因为BLOB可以保持数据原有的样子,防止发生字符集转换。虽然这将带来一点点小麻烦,就是在使用BLOB存储JSON的时候,读取的时候是需要进行转换的,但也不用担心,我们有专门的方法来处理这种情况的数据。
1、创建JSON表
我们创建一个可以存储大JSON文本的数据表,叫做departments_json。
为了确保我们在这个表中存储的数据是JSON格式的,而非其他格式,我们可以添加一个约束条件限定department_data字段的数据一定是JSON格式的。
2、向JSON表中插入数据
如果插入的是普通字符,直接用普通的insert语句插入即可,如果插入的BLOB类型的,那么要做文本到二进制的转换,我们刚才创建的departments_json的department_data就是BLOB类型的,所以稍后我们要进行转换。
因为刚刚我们在departments_json的department_data字段添加了约束条件,所以如果我们插入的数据是非JSON格式的,那么将会收到错误的信息。
3、更新JSON数据
在19c之前,如果要更新JSON表中的数据,是一件比较头痛的事情,因为要替换整个字段值,比如就为了修改JSON数据当中的department值(下面红色线标识的部分),就要将整个字段都替换,比如下面这样写:
从19c开始,我们可以使用JSON patching技术来简化我们的更新,主要使用的是json_mergepatch这个方法,如下所示: