/********************************************************** #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字符串