电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Oracle 處理json數據的方法

瀏覽:226日期:2023-03-12 15:25:43
目錄
  • 備注:
  • 一. Json數據存儲
  • 二. Json數據insert
  • 三. json數據update
  • 四. json數據查詢
  • 五. 常用的json函數
    • 5.1 json_array
    • 5.2 JSON_ARRAYAGG
    • 5.3 JSON_DATAGUIDE
    • 5.4 JSON_MERGEPATCH
    • 5.5 JSON_OBJECT
    • 5.6 JSON_OBJECTAGG
    • 5.7 JSON_QUERY
    • 5.8 json_serialize
    • 5.9 JSON_TABLE
    • 5.10 JSON_TRANSFORM
    • 5.11 JSON_VALUE

備注:

Oracle 19C

一. Json數據存儲

看了下官網,Json數據一般使用varchar2(400),varchar2(32676)或者BLOB來存儲Json數據。
代碼:

create table test_json(id number,json_text varchar2(4000) CONSTRAINT ensure_json CHECK (json_text IS JSON));

二. Json數據insert

數據準備:

insert into test_jsonselect rownum as rn,       json_text from  (select json_object( "deptno" value d.deptno, "dname" value d.dname, "loc" value d.loc, "emps" value json_arrayagg (     json_object("empno" value e.empno,"ename" value e.ename,"job"   value e.job,"mgr"   value e.mgr,"hiredate" value e.hiredate,"sal" value e.sal,"comm" value e.comm     )     ))  as json_text  from dept d  left join emp e  on d.deptno = e.deptno  group by d.deptno,d.dname,d.loc  ) tmp  ;

*查看json數據:
deptno為40的沒有員工,也都進入了,這個看起來有點奇怪

我們看看deptno為10的json數據

三. json數據update

上一步 deptno為40的沒有員工,也都進入了,這個看起來有點奇怪 ,我需要emps后面的都去除掉。

代碼:

UPDATE TEST_JSON SET json_text =  json_mergepatch(json_text, "{"deptno":40,"dname":"OPERATIONS","loc":"BOSTON","emps" : null}") where id = 4   ;

測試記錄:

四. json數據查詢

上一個步驟中,我們插入的部門數據,每個部門都有0或多個員工,此時我們顯示部門名稱,以及部門下所有的員工。

代碼:

select t.id,       t.json_text.dname,       t.json_text.emps.ename from TEST_JSON t ;

測試記錄:
不得不說,Oracle的json功能真的太方便了

代碼2:

select t.id,       JSON_QUERY(t.json_text, "$.emps.ename" WITH WRAPPER) from TEST_JSON t ;

測試記錄2:

五. 常用的json函數

5.1 json_array

如果json中要存數組的話,可以使用json_array函數

SQL> select JSON_ARRAY(1,2,3) from dual;JSON_ARRAY(1,2,3)--------------------------------------------------------------------------------[1,2,3]

5.2 JSON_ARRAYAGG

將多列數據轉換為一個數組類型,例如第二步insert的時候就有使用JSON_ARRAYAGG函數。

代碼:

insert into test_jsonselect rownum as rn,       json_text from  (select json_object( "deptno" value d.deptno, "dname" value d.dname, "loc" value d.loc, "emps" value json_arrayagg (     json_object("empno" value e.empno,"ename" value e.ename,"job"   value e.job,"mgr"   value e.mgr,"hiredate" value e.hiredate,"sal" value e.sal,"comm" value e.comm     )     ))  as json_text  from dept d  left join emp e  on d.deptno = e.deptno  group by d.deptno,d.dname,d.loc  ) tmp  ;

官網測試demo:

CREATE TABLE id_table (id NUMBER);INSERT INTO id_table VALUES(624);INSERT INTO id_table VALUES(null);INSERT INTO id_table VALUES(925);INSERT INTO id_table VALUES(585);SELECT JSON_ARRAYAGG(id ORDER BY id RETURNING VARCHAR2(100)) ID_NUMBERS  FROM id_table;

官網測試demo:

SQL> CREATE TABLE id_table (id NUMBER);Table createdSQL> INSERT INTO id_table VALUES(624);1 row insertedSQL> INSERT INTO id_table VALUES(null);1 row insertedSQL> INSERT INTO id_table VALUES(925);1 row insertedSQL> INSERT INTO id_table VALUES(585);1 row insertedSQL> SQL> SELECT JSON_ARRAYAGG(id ORDER BY id RETURNING VARCHAR2(100)) ID_NUMBERS  2    FROM id_table;ID_NUMBERS--------------------------------------------------------------------------------[585,624,925]SQL> 

5.3 JSON_DATAGUIDE

聚合函數JSON_DATAGUIDE接受JSON數據的表列作為輸入,并將數據指南作為CLOB返回。列中的每一行都被稱為一個JSON文檔。對于列中的每個JSON文檔,該函數返回一個CLOB值,其中包含該JSON文檔的平面數據指南。

代碼:

select t.id,       --t.json_text,       JSON_DATAGUIDE(t.json_text) from TEST_JSON t group by t.id order by t.id ;

測試記錄:

5.4 JSON_MERGEPATCH

用于update json文檔數據
代碼:

UPDATE TEST_JSON SET json_text =  json_mergepatch(json_text, "{"deptno":40,"dname":"OPERATIONS","loc":"BOSTON","emps" : null}") where id = 4   ;

測試記錄:

5.5 JSON_OBJECT

SQL/JSON函數JSON_OBJECT接受一系列鍵-值對或一個對象類型實例作為輸入。集合類型不能傳遞給JSON_OBJECT。

代碼:

select empno,       JSON_OBJECT(key "empno" value empno,   key "ename" value ename,   key "job" value job) as emp_json  from emp;

測試記錄:

5.6 JSON_OBJECTAGG

SQL/JSON函數JSON_OBJECTAGG是一個聚合函數。它將屬性鍵-值對作為其輸入。通常,屬性鍵、屬性值或兩者都是SQL表達式的列。該函數為每個鍵-值對構造一個對象成員,并返回一個包含這些對象成員的JSON對象。

代碼:

select JSON_OBJECTAGG(key dname value deptno) as depts  from dept

測試記錄:

5.7 JSON_QUERY

JSON_QUERY從JSON數據中選擇并返回一個或多個值,然后返回這些值。可以使用JSON_QUERY檢索JSON文檔的片段。

代碼:

select t.id,       JSON_QUERY(t.json_text, "$.emps.ename" WITH WRAPPER) from TEST_JSON t ;

測試記錄:

5.8 json_serialize

json_serialize函數接受任何SQL數據類型(VARCHAR2、CLOB、BLOB)的JSON數據作為輸入,并返回其文本表示。通常使用它來轉換查詢的結果。

可以使用json_serialize將二進制JSON數據轉換為文本形式(VARCHAR2或CLOB),或者通過對文本JSON數據進行精細打印或對其中的非ascii Unicode字符進行轉義來轉換文本JSON數據。

測試記錄:

SQL> SELECT JSON_SERIALIZE ("{a:[1,2,3,4]}" RETURNING VARCHAR2(10) TRUNCATE ERROR ON ERROR) from dual;JSON_SERIALIZE("{A:[1,2,3,4]}"------------------------------{"a":[1,2,

5.9 JSON_TABLE

SQL/JSON函數JSON_TABLE創建JSON數據的關系視圖。它將JSON數據計算的結果映射到關系行和列中。可以使用SQL將函數返回的結果作為虛擬關系表進行查詢。JSON_TABLE的主要目的是為JSON數組中的每個對象創建一行關系數據,并將該對象中的JSON值作為單獨的SQL列值輸出。

代碼:

SELECT t.*FROM test_jsonNESTED json_text COLUMNS(dname, deptno) t;

測試記錄:

代碼2:

SELECT t.*FROM test_json LEFT OUTER JOINJSON_TABLE(json_text COLUMNS(dname, deptno)) t ON 1=1;

測試記錄2:

5.10 JSON_TRANSFORM

使用JSON_TRANSFORM修改JSON文檔輸入到函數中。通過指定一個或多個對JSON數據執行更改的修改操作,可以更改JSON文檔(或JSON文檔的部分)。修改后的JSON文檔作為輸出返回。

5.11 JSON_VALUE

SQL/JSON函數JSON_VALUE在JSON數據中查找指定的標量JSON值,并將其作為SQL值返回。

測試記錄:

SQL> SELECT JSON_VALUE("{a:100}", "$.a") AS value  2    FROM DUAL;VALUE--------------------------------------------------------------------------------100SQL> 

參考:

到此這篇關于Oracle 處理json數據的文章就介紹到這了,更多相關Oracle 處理json數據內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: Oracle
主站蜘蛛池模板: 盘扣式脚手架-附着式升降脚手架-移动脚手架,专ye承包服务商 - 苏州安踏脚手架工程有限公司 | 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | 东莞画册设计_logo/vi设计_品牌包装设计 - 华略品牌设计公司 | 导电银胶_LED封装导电银胶_半导体封装导电胶厂家-上海腾烁 | CXB船用变压器-JCZ系列制动器-HH101船用铜质开关-上海永上船舶电器厂 | 西门子气候补偿器,锅炉气候补偿器-陕西沃信机电工程有限公司 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 | 天助网 - 中小企业全网推广平台_生态整合营销知名服务商_天助网采购优选 | 橡胶膜片,夹布膜片,橡胶隔膜密封,泵阀设备密封膜片-衡水汉丰橡塑科技公司网站 | 武汉画册印刷厂家-企业画册印刷-画册设计印刷制作-宣传画册印刷公司 - 武汉泽雅印刷厂 | 档案密集柜_手动密集柜_智能密集柜_内蒙古档案密集柜-盛隆柜业内蒙古密集柜直销中心 | 脑钠肽-白介素4|白介素8试剂盒-研域(上海)化学试剂有限公司 | 巩义市科瑞仪器有限公司| 澳威全屋定制官网|极简衣柜十大品牌|衣柜加盟代理|全屋定制招商 百度爱采购运营研究社社群-店铺托管-爱采购代运营-良言多米网络公司 | 地埋式垃圾站厂家【佳星环保】小区压缩垃圾中转站转运站 | 昆明挖掘机修理厂_挖掘机翻新再制造-昆明聚力工程机械维修有限公司 | 数码管_LED贴片灯_LED数码管厂家-无锡市冠卓电子科技有限公司 | 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 岩棉切条机厂家_玻璃棉裁条机_水泥基保温板设备-廊坊鹏恒机械 | 上海平衡机-单面卧式动平衡机-万向节动平衡机-圈带动平衡机厂家-上海申岢动平衡机制造有限公司 | 浙江红酒库-冰雕库-气调库-茶叶库安装-医药疫苗冷库-食品物流恒温恒湿车间-杭州领顺实业有限公司 | 干法制粒机_智能干法制粒机_张家港市开创机械制造有限公司 | 哈尔滨治「失眠/抑郁/焦虑症/精神心理」专科医院排行榜-京科脑康免费咨询 一对一诊疗 | 淄博不锈钢,淄博不锈钢管,淄博不锈钢板-山东振远合金科技有限公司 | 东莞工厂厂房装修_无尘车间施工_钢结构工程安装-广东集景建筑装饰设计工程有限公司 | 菲希尔X射线测厚仪-菲希尔库伦法测厚仪-无锡骏展仪器有限责任公司 | 自动记录数据电子台秤,记忆储存重量电子桌称,设定时间记录电子秤-昆山巨天 | 南京展台搭建-南京展会设计-南京展览设计公司-南京展厅展示设计-南京汇雅展览工程有限公司 | 科普仪器菏泽市教育教学仪器总厂 | 医疗仪器模块 健康一体机 多参数监护仪 智慧医疗仪器方案定制 血氧监护 心电监护 -朗锐慧康 | 样品瓶(色谱样品瓶)百科-浙江哈迈科技有限公司 | 深圳侦探联系方式_深圳小三调查取证公司_深圳小三分离机构 | pos机办理,智能/扫码/二维码/微信支付宝pos机-北京万汇通宝商贸有限公司 | 仿古建筑设计-仿古建筑施工-仿古建筑公司-汉匠古建筑设计院 | 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | 超声波分散机-均质机-萃取仪-超声波涂料分散设备-杭州精浩 | 阻垢剂,反渗透阻垢剂,缓蚀阻垢剂-山东普尼奥水处理科技有限公司 真空粉体取样阀,电动楔式闸阀,电动针型阀-耐苛尔(上海)自动化仪表有限公司 | 碎石机设备-欧版反击破-欧版颚式破碎机(站)厂家_山东奥凯诺机械 高低温试验箱-模拟高低温试验箱订制-北京普桑达仪器科技有限公司【官网】 | 送料机_高速冲床送料机_NC伺服滚轮送料机厂家-东莞市久谐自动化设备有限公司 | 佛山市钱丰金属不锈钢蜂窝板定制厂家|不锈钢装饰线条|不锈钢屏风| 电梯装饰板|不锈钢蜂窝板不锈钢工艺板材厂家佛山市钱丰金属制品有限公司 |