ORACLE 12C 使用 JSON 的简单入门

   最近项目在后端与数据库方面的交互中涉及到JSON,本文章就先从简单入手,从入门学习ORACLE 12C中的JSON应用,后面再上传关于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<CLOB、BLOB,PS建议,使用varchar2(4000)大小不超4000字节可以提高性能(最大为32767字节),超过建议使用下一行存数据,若执着超过32767字节则使用CLOB、BLOB

例如:

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";

猜你喜欢

转载自blog.csdn.net/use_admin/article/details/81485317
今日推荐