json for oracle12c,oracle12C数据库JSON的应用 --PL/SQL使用json简单入门篇

最近项目在后端与数据库方面的交互中涉及到JSON,并且oracl12以上的版本支持JSON格式的数据存储和解析;本文章就先从简单入手,从入门学习ORACLE 12C中的JSON应用,后面再上传关于JSON在数据库方面的更深层次的应用,如存储过程等等方面的应用。

更深层次的应用请点击此处:pl/sql存储过程中json解析应用篇

一、oracle12.2.0.1版本增加的json-data功能特性:

1.对JSON Data的存储和管理

(1)数据表可以使用JSON 虚拟列来作表的键key

(2)可以创建JSON索引(with range,list, hash, or interval partitioning)

2.对JSON Data的查询

(1)JSON路径表达式增强功能:可以包含必须满足的过滤器表达式,通过匹配的数据和转换方法来改变它。

(2)解析成JSON后可以使用点符号访问JSON数组或对象中的元素

(3)增加JSON functions(方法):

json_value, json_query, json_object, json_array, json_table, json_objectagg, json_arrayagg

JSON condition(条件判断):

json_exists(返回boolean数据类型), is json, is not json, json_textcontains

3.还有对一些搜索索引的性能增强,视图中使用json数据等等

二、实用的使用案例(PL/SQL的json_value值支持返回boolean的数据类型):

在数据库中使用JSON的一般用法:

(1)在create table时,添加json字段column,并CHECK 该字段CONSTRAINT IS JSON数据(即是说明该字段列存是JSON数据,每次insert该字段列数据都会去CHECK一下是否 IS JSON),JSON字段类型可以是VARCHAR2,CLOB(字符大对象) or BLOB(二进制大对象),字节大小VARCHAR2例如:

CREATE TABLE c_json_t

(id VARCHAR2(35) NOT NULL PRIMARY KEY,

----定义json_data为JSON数据类型,(STRICT)为定义严格的JSON格式

json_data VARCHAR2(4000) CONSTRAINT ensure_jsondata CHECK (json_data IS JSON(STRICT)));

(2)将json数据insert到JSON字段colum中,可以进行多嵌套JSONObject和JSONArray格式的JSON数据

例如:

INSERT INTO c_json_t

VALUES(

SYS_GUID(),

'{

"Name":"ZhangSan",

"Sex":null,

"SNO":"98565",

"Subject":{"kind":"arts","name":{"1":"Chinese","2":"English"}},

"grede":[{"name":"Chinese","sore":"65"},{"name":"English","sore":"56"}]

}');

(3) Query查询JSON

1)可以使用条件:json_exists检查是否存在某个json值,

is json和is not json检查是否包含json数据;

2)可以使用方法:

json_value可以选取其他的json数据作为当前sql的某个字段的value值,json_query可以从其他的json数据查询一个或者多个values(通常是jsonObject或jsonArray)作为当前sql的某个json字段的json数据字符串,json_table可以将json数据作为一个虚拟表

例如:

----查询json_exists检查

select t1.json_data.Name from c_json_t t1 where json_data is json and json_exists(json_data,'$.Subject.name');

----查询json key中subkey对应的value值

select t1.json_data.Subject.name from c_json_t t1;

----查询json_value

SELECT * FROM c_json_t where id=json_value(json_data,'$.SNO');

----查询json_query

SELECT json_query(column,json_path RETURNING data_type array_wrapper error_hander ---ON ERROR) FROM table;

SELECT json_query(json_data,'$.Name' with WRAPPER ) FROM c_json_t

----json_table

SELECT jt.column_alias FROM table,json_table(column,'$' error_handler ON ERROR COLUMNS ("COLUMN_ALIAS" data_type FORMAT JSON array_wrapper PATH json_path

))AS "JT";

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值