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

  • 相关阅读:
    Java + Element-UI 实现简单的树形菜单
    Spring Boot 日志
    SpringMVC入门
    vue 路由钩子函数 刷新当前路由
    使用vue 路由钩子函数 报错 Uncaught (in promise) undefined
    Webpac优化看文记录
    移动端长按复制记录
    Vue.js 运行机制全局概览浅读
    老异步问题了
    vue-lazyload的使用 图片懒加载
  • 原文地址:https://www.cnblogs.com/diaobiyong/p/13364999.html
Copyright © 2020-2023  润新知