zoukankan      html  css  js  c++  java
  • GET_MAPPING_DQL based on columns

    PROCEDURE PROC_GET_MAPPING_DQL(IN_USER VARCHAR2,IN_TEST1_TAB VARCHAR2,IN_TEST2_TAB VARCHAR2,IN_BUSI_DT DATE)
      IS
        V_IN_TEST2_TAB     VARCHAR2(32):=UPPER(IN_TEST2_TAB);
        V_IN_TEST1_TAB    VARCHAR2(32):=UPPER(IN_TEST1_TAB);
        V_PK_COL_JOIN    VARCHAR2(1024);
        V_PK_COL         VARCHAR2(512);
        --V_IN_EAST_DATE   VARCHAR2(64):=TO_CHAR(IN_BUSI_DT,'YYYY-MM-DD');
        V_IN_TEST_DATE    VARCHAR2(64):=TO_CHAR(IN_BUSI_DT,'YYYY-MM-DD');
        V_NULL_TYPE      VARCHAR2(64);
        V_MAP_COLS       CLOB;
        --V_SELECT_COLS    CLOB;
        V_PREDICATE      CLOB;
        V_MAP_DQL        CLOB;
        V_TEST_OVER       CLOB;
        V_EAST_OVER      CLOB;
        V_MORE_COLS      CLOB;
    
      BEGIN
        /*SELECT A.COLUMN_NAME,A.DATA_TYPE FROM USER_TAB_COLUMNS A,USER_TAB_COLUMNS B
                  WHERE A.COLUMN_NAME=B.COLUMN_NAME
                    AND A.TABLE_NAME=V_IN_TEST2_TAB
                    AND B.TABLE_NAME=V_IN_TEST1_TAB*/--这是共同字段,按理应该包含所有字段
    
        FOR I IN (SELECT A.COLUMN_NAME,DATA_TYPE,--SUBSTR(REPLACE(B.COMMENTS,CHR(10),''),1,9) AS COMMENTS
                         case when lengthb(coalesce(substr(REPLACE(b.comments, TO_CHAR(CHR(10)),':'),1,instr(REPLACE(b.comments, TO_CHAR(CHR(10)),' '),' ')-1),b.comments,a.column_name))>30 
                         then
                          substrb(coalesce(substr(REPLACE(b.comments, TO_CHAR(CHR(10)),':'),1,instr(REPLACE(b.comments, TO_CHAR(CHR(10)),' '),' ')-1),b.comments,a.column_name),-30)
                         else
                          coalesce(substr(REPLACE(b.comments, TO_CHAR(CHR(10)),':'),1,instr(REPLACE(b.comments, TO_CHAR(CHR(10)),' '),' ')-1),b.comments,a.column_name) 
                         end as comments
                    FROM ALL_TAB_COLUMNS A
                    LEFT JOIN ALL_COL_COMMENTS B
                      ON A.TABLE_NAME = B.TABLE_NAME
                     AND A.COLUMN_NAME = B.COLUMN_NAME
                     AND A.OWNER = B.OWNER
                   WHERE A.TABLE_NAME=V_IN_TEST1_TAB
                     AND A.OWNER = UPPER(IN_USER)
                     AND A.COLUMN_NAME NOT IN('COL1','COL2')
                   ORDER BY COLUMN_ID)
    
        LOOP
          SELECT DECODE(I.DATA_TYPE,'DATE','DATE''9999-12-31''',0)
            INTO V_NULL_TYPE
            FROM DUAL;
    
          V_MAP_COLS :=V_MAP_COLS||'CASE WHEN NVL(TB_TEST1.'||I.COLUMN_NAME||','
                                 ||V_NULL_TYPE||')=NVL(TEST4_I.'||I.COLUMN_NAME||','
                                 ||V_NULL_TYPE||') THEN ''Y'' ELSE TB_TEST1.'
                                 ||I.COLUMN_NAME||'||'' <> ''||TEST4_I.'
                                 ||I.COLUMN_NAME||' END '||'"'||NVL(I.COMMENTS,I.COLUMN_NAME)||'"'||','||CHR(10)||'                            ';
          --V_SELECT_COLS:=V_SELECT_COLS||I.COLUMN_NAME||','||CHR(10);
          V_PREDICATE :=V_PREDICATE||'"'||NVL(I.COMMENTS,I.COLUMN_NAME)||'"'||'<>''Y'' OR '||CHR(10)||'                        ';
    
          V_MORE_COLS := V_MORE_COLS || I.COLUMN_NAME || ' AS ' ||
                         '"'||NVL(I.COMMENTS,I.COLUMN_NAME)||'",';
    
        END LOOP;
        V_MAP_COLS    :=RTRIM(V_MAP_COLS,','||CHR(10)||'                            ');
        --V_SELECT_COLS :=RTRIM(V_SELECT_COLS,',')||CHR(10);
        V_PREDICATE   :=RTRIM(V_PREDICATE,' OR '||CHR(10)||'                        ');
        V_MORE_COLS   :=RTRIM(V_MORE_COLS,',');
    
        SELECT LISTAGG('TB_TEST1.'||REGEXP_SUBSTR(V_COLUMNS,'[^,]+',1,ROWNUM)||
                       ' = TEST4_I.' ||REGEXP_SUBSTR(V_COLUMNS,'[^,]+',1,ROWNUM),
                       CHR(10)||'                             AND ')
               WITHIN GROUP(ORDER BY V_COLUMNS) AS PK_COL_LIST,
    
               LISTAGG('TB_TEST1.'||REGEXP_SUBSTR(V_COLUMNS,'[^,]+',1,ROWNUM)||' AS PK_'||REGEXP_SUBSTR(V_COLUMNS,'[^,]+',1,ROWNUM),',')
               WITHIN GROUP(ORDER BY V_COLUMNS) AS PK_COL
          INTO V_PK_COL_JOIN,V_PK_COL
          FROM
          (
            SELECT CONS.CONSTRAINT_NAME,CONS.TABLE_NAME,REPLACE(IND_VIEW.V_COLUMNS,'DATA_DATE,','') AS V_COLUMNS
              FROM ALL_CONSTRAINTS CONS,(SELECT TABLE_NAME,INDEX_NAME,
                                               LISTAGG(COLUMN_NAME,',')WITHIN GROUP(ORDER BY COLUMN_POSITION) AS V_COLUMNS
                                          FROM ALL_IND_COLUMNS
                                          WHERE INDEX_OWNER = 'USER4'
                                         GROUP BY INDEX_NAME,TABLE_NAME) IND_VIEW
             WHERE CONS.CONSTRAINT_NAME=IND_VIEW.INDEX_NAME
               AND CONS.TABLE_NAME=IND_VIEW.TABLE_NAME
               AND CONS.OWNER='USER4'
               AND CONS.TABLE_NAME=REPLACE(IN_TEST2_TAB,'_BAK','')
               AND CONS.CONSTRAINT_TYPE='P'
          )
          CONNECT BY LEVEL<=REGEXP_COUNT(V_COLUMNS,',')+1;
    
        IF V_PK_COL IS NOT NULL THEN
           V_MAP_COLS := V_PK_COL||','||V_MAP_COLS;
        END IF;
    
        V_MAP_DQL:='SELECT *
                      FROM
                          (
                             SELECT COUNT(*) OVER() MAPPING_COUNT,'||V_MAP_COLS||'
                               FROM '||IN_USER||'.'||V_IN_TEST1_TAB||' TB_TEST1,'||'USER4.'||V_IN_TEST2_TAB||' TEST4_I
                              WHERE '||V_PK_COL_JOIN|| 
                                ' AND TB_TEST1.BUSI_DT= DATE'''||V_IN_TEST_DATE||'''
                          )
                     WHERE ('||V_PREDICATE||');';
    
        V_TEST_OVER:='SELECT '||V_MORE_COLS||'
      FROM '||'USER4.'||V_IN_TEST2_TAB||' TEST4_I
     WHERE NOT EXISTS
               (SELECT 1 FROM '||IN_USER||'.'||V_IN_TEST1_TAB||' TB_TEST1
                 WHERE '||V_PK_COL_JOIN||
                 ' AND TB_TEST1.BUSI_DT=DATE'''||V_IN_TEST_DATE||''');';
    
        V_EAST_OVER:='SELECT '||V_MORE_COLS||'
      FROM '||IN_USER||'.'||V_IN_TEST1_TAB||' TB_TEST1
     WHERE NOT EXISTS
               (SELECT 1 FROM '||'USER4.'||V_IN_TEST2_TAB||' TEST4_I
                 WHERE '||V_PK_COL_JOIN||')
       AND TB_TEST1.BUSI_DT=DATE'''||V_IN_TEST_DATE||''';';
    
        DELETE TEST_GET_MAPPING_DQL WHERE DM_TABNAME=V_IN_TEST1_TAB;
        COMMIT;
    
        INSERT INTO TEST_GET_MAPPING_DQL(MAPPING_DQL,PROD_MORE_DQL,DM_MORE_DQL,DM_TABNAME,PROD_TABNAME,INPUT_DT)
          VALUES (V_MAP_DQL,V_TEST_OVER,V_EAST_OVER,V_IN_TEST1_TAB,V_IN_TEST2_TAB,SYSDATE);
        COMMIT;
    
      END;
    All for u
  • 相关阅读:
    java OA系统 自定义表单 流程审批 电子印章 手写文字识别 电子签名 即时通讯
    flowable 获取当前任务流程图片的输入流
    最新 接口api插件 Swagger3 更新配置详解
    springboot 集成 activiti 流程引擎
    java 在线考试系统源码 springboot 在线教育 视频直播功能 支持手机端
    阿里 Nacos 注册中心 配置启动说明
    springboot 集成外部tomcat war包部署方式
    java 监听 redis 过期事件
    springcloudalibaba 组件版本关系
    java WebSocket 即时通讯配置使用说明
  • 原文地址:https://www.cnblogs.com/ayumie/p/13092060.html
Copyright © 2011-2022 走看看