zoukankan      html  css  js  c++  java
  • 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字符串

  • 相关阅读:
    Linux下的lds链接脚本简介
    Fedora下载地址
    SkyEye的使用
    shell变量详解
    Linux shell 脚本攻略之正则表达式入门
    Linux shell 脚本攻略之统计文件的行数、单词数和字符数
    Linux shell 脚本攻略之创建不可修改文件
    Linux shell 脚本攻略之生成任意大小的文件
    Linux shell 脚本攻略之批量重命名
    Linux shell 脚本攻略之文件查找与文件列表
  • 原文地址:https://www.cnblogs.com/diaobiyong/p/13364999.html
Copyright © 2011-2022 走看看