暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在oracle中使用json格式的数据

9206

介绍


JSON格式在web时代借助js的数据交互火了起来,因此也就有了如mongodb这样的nosql数据库,用来存储json格式的数据库。

但模式融合一定是未来趋势,因为每一种数据库模式都有特定的使用场景,一个复杂的应用很难使用一种模式解决数据处理。

因此,oracle数据库除了提供如Oracle NoSQL数据库和Oracle Berkeley DB这样的NoSQL数据库外,还在传统数据库中提供了JSON的支持。

和XML数据可以类似的方式在Oracle数据库中使用,无需定义数据的架构Oracle数据库通过关系数据库功能(包括事务,索引,声明性查询和视图)来支持JSON。

JSON数据通常存储在NoSQL数据库中,例如Oracle NoSQL数据库和Oracle Berkeley DB。这些允许存储和检索不基于任何模式的数据,但是它们不提供关系数据库的严格一致性模型。

Oracle Database对JSON的本机支持消除了此类变通办法。它提供了与JSON一起使用的关系数据库功能的所有优点,包括事务,索引,声明性查询和视图。

Oracle数据库查询是声明性的。您可以将JSON数据与关系数据结合在一起。而且,您可以通过关系投影JSON数据,使其可用于关系流程和工具。您还可以从数据库内部查询存储在数据库外部的外部表中的JSON数据。

JSON数据是使用SQL数据类型储存在Oracle数据库VARCHAR2,CLOB和BLOB。Oracle建议始终使用is_json检查约束来确保列值是有效的JSON实例。

在数据库中的JSON数据是文本,但是文本可使用的数据类型被存储BLOB为,以及VARCHAR2或CLOB。如果可能,Oracle建议您使用BLOB存储。特别是,这样做避免了任何字符集转换的需要。

用法

  • 创建表

  1. CREATE TABLE student

  2.  (id    RAW (16) NOT NULL,

  3.  create_time TIMESTAMP WITH TIME ZONE,

  4.  info CLOB

  5.  CONSTRAINT student_json CHECK (info IS JSON));


复制
  • 插入数据

  1. $ INSERT INTO student

  2. VALUES

  3. (SYS_GUID(),

  4.  SYSTIMESTAMP,

  5.  '{

  6. "name": "张三",

  7. "age": 22,

  8. "hobby": ["篮球", "游泳", "象棋"],

  9. "tel": "13893665508",

  10. "college": {

  11. "name": "北京大学",

  12. "major": "计算机应用"

  13. }

  14. }');

复制
  • 整个字段查询

  • 查询json中的值,数组,对象

  • 查询json中数组中的单个值

  • 查询条件中使用json中的条件

  1. select * from student a where a.info.name='张三'

    查询条件中使用json中的条件

复制


  • 可以在json字段上创建索引


  1. CREATE  INDEX idx_info

  2. ON student (json_value(info, '$.name'));

复制


说明

只能整体对存入的json进行修改更新;

没有很好的函数支持对现有常规表返回json格式的数据,需要写存储过程实现

功能虽然还不够强大,但足以支撑规则数据查询后直接以json数据进行展示的应用


最后修改时间:2019-12-27 09:32:22
文章转载自数据库平台优化,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论