首页 > 技术文章 > oracle 12c 处理json字段

diaobiyong 原文

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

推荐阅读