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;
    

      

  • 相关阅读:
    centos安装python
    【剑指Offer学习】【所有面试题汇总】
    内连接,外链接(左连接、右连接、全连接),交叉连接
    数据库三范式
    聚集索引与非聚集索引
    B树和B+树的区别
    TCP建立连接三次握手和释放连接四次握手
    HTTP协议详解
    常见的HTTP状态码(HTTP Status Code)说明
    归并排序的思想及递归运行步骤详解
  • 原文地址:https://www.cnblogs.com/JeromeZ/p/5337910.html
Copyright © 2011-2022 走看看