oracle 12c 处理json字段
/********************************************************** #PROCEDURE: 获取调整后的大字段 #author:diaoby #createdate:2020-7-16 16:00:24 #input: RLTCODE--返回代码,0表示成功 IN_JSON_STRING 大字段 IN_INSTID 流程实例ID ***********************************************************/ PROCEDURE P_ACTIVTI_JSON(RLTCODE OUT INT, IN_JSON_STRING IN OUT VARCHAR2, IN_INSTID IN VARCHAR2) IS RLTTXT VARCHAR2(2000); --返回信息 V_JSON_ARRAY JSON_ARRAY_T; V_JSON_OBJECT JSON_OBJECT_T; V_TASKID VARCHAR(36); BEGIN /*SELECT A.JSON_STRING INTO IN_JSON_STRING FROM BPM_HIS_MONITOR A WHERE PROCESS_INSTANCE_ID = IN_INSTID;*/ --获取json数组 V_JSON_ARRAY := JSON_ARRAY_T(IN_JSON_STRING); --遍历json数组 FOR J IN 0 .. V_JSON_ARRAY.GET_SIZE - 1 LOOP V_JSON_OBJECT := JSON_OBJECT_T(V_JSON_ARRAY.GET(J)); --获取json对象里taskId 字段 V_TASKID := V_JSON_OBJECT.GET_STRING('taskId'); FOR M IN (SELECT T.ID_, TO_CHAR(T.END_TIME_, 'yyyy-mm-dd hh24:mi:ss') END_TIME FROM ACT_HI_TASKINST T WHERE PROC_INST_ID_ = IN_INSTID) LOOP IF V_TASKID = M.ID_ THEN --替换原先endTime值 V_JSON_OBJECT.PUT('endTime', (TO_DATE(M.END_TIME, 'yyyy-mm-dd hh24:mi:ss') - TO_DATE('1970-01-01 08:00:00', 'yyyy-mm-dd hh24:mi:ss')) * 24 * 60 * 60 * 1000); END IF; END LOOP; END LOOP; IN_JSON_STRING := V_JSON_ARRAY.TO_STRING(); RLTCODE := 0; EXCEPTION WHEN OTHERS THEN ROLLBACK; RLTCODE := SQLCODE; RLTTXT := SQLERRM(SQLCODE); DBMS_OUTPUT.PUT_LINE(RLTTXT); END;
首先通过JSON_OBJECT_T 返回json数组
然后遍历通过V_JSON_ARRAY.GET_SIZE - 1 遍历 数组
通过JSON_OBJECT_T 获取json对象
有了对象后可以通过V_JSON_OBJECT.GET_STRING('taskId'); 获取属性值
然后通过 V_JSON_OBJECT.PUT 修改调整的json值
最后通过V_JSON_ARRAY.TO_STRING() 返回整个json字符串
posted on 2020-07-23 10:48 diaobiyong 阅读(2830) 评论(0) 编辑 收藏 举报