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;
    

      

  • 相关阅读:
    tee命令
    linux优化之SElinux关闭
    (1)使用bash脚本实现批量添加用户
    Django admin管理工具的使用、定制及源码解析
    Mysql常见命令
    树梅派
    19道Python循环遍历,while,for语句测试题,网上看到的题目,自己不看答案全部做了一次,总共3个小时左右
    9*9的矩形,中间有个星号,按不同方向键,星星对应移动
    app在admin中显示成我们想要的中文名
    九九乘法表
  • 原文地址:https://www.cnblogs.com/JeromeZ/p/5337910.html
Copyright © 2011-2022 走看看