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字符串


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM