官网json_table文档路由
路径表达式文档路由
背景:有一些动态表格,需要新建一张中间表,里边就两三个字段比如主表id,某某类型id,某某类型是否选中。对于这种表新建个表还得加各种创建人修改人版本号是否逻辑删除啥的字段太过麻烦。于是可以直接用一个json保存信息,但解析这条json就需要费些功夫了。所以这里进行整理以备使用。
1.首先是数组json
实现效果为:
sql:(意为我要用JSON_TABLE函数解析一条json语句,ce.ceshi就是这条语句,我要将这条json集合下的每个元素进行解析成字段,其中本元素解析为c1列,本元素下的name属性解析为VARCHAR2类的字段,date解析为TIMESTAMP类的字段)
SELECT ceshi,b.* FROM CLOUD_CM_DEV.BUSI_CM_CESHI ce,
JSON_TABLE(ce.ceshi, '$[*]' COLUMNS(C1 VARCHAR2(50) FORMAT JSON PATH '$',C2 VARCHAR2(50) PATH '$.name',C3 TIMESTAMP PATH '$.date')) bwhere id = 1;
符号$[*]的理解是这个集合下的所有元素,$是指本元素,$.a是指此元素的a属性
若想嵌套查询可使用json_nested_col函数:
如
坑:
1.解析c1字段时不加FORMAT JSON或解析c2,c3加了FORMAT JSON会使该列null。如
2.集合json解析
SELECT CESHI,b FROM CLOUD_CM_DEV.BUSI_CM_CESHI ce,JSON_OBJECT_KEYS(ce.ceshi) b where id = 2;
val暂时未找到好办法加入同一行。
注意:使用JSON_OBJECT_KEYS时k必须有双引号包裹
无双引号时报错