zoukankan      html  css  js  c++  java
  • GE_OG_CALC_COLUMN_EMPTY

    CREATE OR REPLACE PROCEDURE CUST_MKT_DWH.GE_OG_CALC_COLUMN_EMPTY(P_TABLE_NAME IN VARCHAR2) IS
        --TYPE  
        TYPE Type_Column_Name IS RECORD(
            TABLE_NAME  ALL_TAB_COLS.TABLE_NAME%TYPE,
            COLUMN_NAME ALL_TAB_COLS.COLUMN_NAME%TYPE
        );
        TYPE XX               IS TABLE OF Type_Column_Name;
        TYPE Type_CalcSet     IS TABLE OF CUST_MKT_DWH.GE_OG_MKT_CALC_COLUMN_EMPTY%ROWTYPE;
        --Variable of Normal
        V_Column_Name         XX;
        CalcSet               Type_CalcSet := Type_CalcSet();
        V_Empty_Column        NUMBER(8);
        V_Not_Empty_Column    NUMBER(8);
        V_Sql                 VARCHAR2(32767);
        --Variable of EXCEPTION
        DML_EXCEPTION         EXCEPTION;
        PRAGMA EXCEPTION_INIT(DML_EXCEPTION,-24381);
    BEGIN
        --First,search data and calc number to insert into CalcSet
        SELECT TABLE_NAME,COLUMN_NAME BULK COLLECT INTO V_Column_Name
        FROM ALL_TAB_COLS
        WHERE TABLE_NAME IN(SELECT TABLE_NAME
                            FROM ALL_TABLES
                            WHERE OWNER = 'CUST_MKT_DWH'
                            AND TABLE_NAME LIKE P_TABLE_NAME);
        
        --EXECUTE IMMEDIATE V_Sql;         
        FOR i IN V_Column_Name.FIRST .. V_Column_Name.LAST LOOP
            V_Sql := 'SELECT COUNT('||V_Column_Name(i).column_name||'),COUNT(*)-COUNT('||V_Column_Name(i).column_name||')
                     FROM '||V_Column_Name(i).table_name; 
            BEGIN   
                EXECUTE IMMEDIATE V_Sql INTO V_Not_Empty_Column,V_Empty_Column;
            EXCEPTION
                WHEN OTHERS THEN
                    DBMS_OUTPUT.PUT_LINE('Execute query count sql script exception');
                    CONTINUE;
            END;
            IF V_Not_Empty_Column=0 THEN
                CalcSet.EXTEND;
                CalcSet(CalcSet.LAST).TABLE_NAME    := V_Column_Name(i).table_name;
                CalcSet(CalcSet.LAST).COLUMN_NAME   := V_Column_Name(i).column_name;
                CalcSet(CalcSet.LAST).NOT_EMPTY_NUM := V_Not_Empty_Column;
                CalcSet(CalcSet.LAST).EMPTY_NUM     := V_Empty_Column;
            END IF;
        END LOOP;
        --Second,insert into table from data of CalcSet
        EXECUTE IMMEDIATE 'TRUNCATE TABLE CUST_MKT_DWH.GE_OG_MKT_CALC_COLUMN_EMPTY';
        BEGIN
            FORALL i IN CalcSet.FIRST .. CalcSet.LAST SAVE EXCEPTIONS
                INSERT INTO CUST_MKT_DWH.GE_OG_MKT_CALC_COLUMN_EMPTY(TABLE_NAME,COLUMN_NAME,NOT_EMPTY_NUM,EMPTY_NUM,CREATE_TIME)
                       VALUES(CalcSet(i).TABLE_NAME,CalcSet(i).COLUMN_NAME,CalcSet(i).Not_Empty_NUM,CalcSet(i).Empty_NUM,CURRENT_DATE);
                COMMIT;  
        EXCEPTION
            WHEN DML_EXCEPTION THEN
                ROLLBACK;
                DBMS_OUTPUT.PUT_LINE('DML exception');
                RAISE;
            WHEN OTHERS THEN
                ROLLBACK;
                DBMS_OUTPUT.PUT_LINE('Forall insert others exception');
                RAISE;
        END;
    EXCEPTION
        WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE('Global others exception');
            RAISE;
    END;
    

      

  • 相关阅读:
    如何在Blog中使用feedburner管理RSS订阅
    网络基本功(八):细说TCP滑动窗口
    JAVA三大框架的各自作用
    NHibernate与EF(Entity Framework)的区别
    程序模拟浏览器请求及会话保持-python实现
    Netbeans7.4下搭建struts2.3.16
    解决Sqlite UTF-8中文数据格式在DOS窗口下中文乱码
    Android使用xml中定义的动画效果
    Android 之Activity切换动画效果
    设置ActioinBar 的背景色以及Title的字体颜色
  • 原文地址:https://www.cnblogs.com/JeromeZ/p/5337910.html
Copyright © 2011-2022 走看看