导读:Oracle 在 12c(12.1.0.2)版本中引入了对JSON的支持,允许将JSON存储在数据库中的varchar2或LOB(CLOB或BLOB)中。这意味着,我们可以利用无模式设计模型所提供的灵活性来构建应用程序,但又能从Oracle数据库的强大功能中受益。
Oracle 在 12c(12.1.0.2)版本中引入了对JSON的支持,允许将JSON存储在数据库中的varchar2或LOB(CLOB或BLOB)中。这意味着,我们可以利用无模式设计模型所提供的灵活性来构建应用程序,但又能从Oracle数据库的强大功能中受益。
早期版本中创建包含 JSON 对象的表,类似:
代码语言:javascript复制CREATE TABLE theater
(
theater_id VARCHAR2(255),
json_document BLOB
);
对于 BLOB 类型的插入,需要对数据进行转换:
代码语言:javascript复制INSERT INTO theaters (theater_name, json_document) VALUES ('Century_16_Redwood',
utl_raw.cast_to_raw('{"id":1,
"name":"Century 16",
"location":{"street":"Main St",
"city":"Redwood",
"zipCode":"94607",
"state":"CA",
"phoneNumber":null
}
}')
);
Oracle 的 JSON 支持,使得我们可以使用标准SQL查询JSON文档,也可以利用高级分析功能,对单个属性或整个文档进行索引,并行处理数十亿个JSON文档,云和恩墨的部分客户已经在 12.1 版本时采用了这个特性,使得数据库支持 NoSQL 上更加丰富灵活。
Oracle 还提供了一些工具来发现JSON文档是由哪些属性组成的,并在集合之上创建关系视图。开发人员还可以通过使用Java、Node.js、Python、C语言和REST的SODA API来访问Oracle数据库,你甚至可以将Oracle 数据库视为一个 NoSQL数据库。
JSON 是 Oracle 多模化支持的一个重要演进。
在Oracle数据库20c中,通过提供一个 Native 数据类型 "JSON ",继续加强和改进了 Oracle 对JSON的支持。
使用原生的数据类型,在读取或更新操作时不必对JSON进行解析,而只在插入时才进行解析,然后JSON以内部二进制格式保存,这使得访问速度更快。这可以使读取和更新操作的速度提高4到5倍,更新到非常大的JSON文档的速度提高20到30倍。
现在创建一个包含 JSON 类型的数据表类似:
代码语言:javascript复制CREATE TABLE j_order ( id INTEGER PRIMARY KEY, po_doc JSON )
新的数据类型并不是Oracle数据库20c中为JSON引入的唯一变化,Oracle还增加了一个新的JSON函数JSON_TRANSFORM,它使得在一次操作中更新和删除文档中的多个属性变得更加简单。
参考:https://docs.oracle.com/en/database/oracle/oracle-database/20/adjsn/oracle-sql-function-json_transform.html#GUID-7BED994B-EAA3-4FF0-824D-C12ADAB862C1