oracle12c处理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 IN0 .. 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;
oracle 字符串转数组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字符串

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。