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;

  

GE_OG_CALC_COLUMN_EMPTY的更多相关文章

随机推荐

  1. python 【第四篇】:面向对象(一)

    1.前言 提笔忘字,感慨良多!python自习前前后后有一年多了吧,貌似花了不少时间,其实没学到啥东西,都是在面向对象编程之前基础知识这块一直打转转,每次到了面向对象这块就感觉很蒙,看两天直接放弃,从 ...

  2. uva 301 Transportation 铁路公司的阳谋 纯dfs暴力

    题目比较难理解. 给出铁路的容量和站点数,以及几笔订单,要求算出如何盈利最大. 咋一看想贪心,但无法确定是最优解啊. 于是用dfs做,就两种状况,选与不选,先开一个每个站点的当前人数数组,假设要选,然 ...

  3. 漏掉的账目(用C语言去重)

    问题描述: 某财务部门结账时发现总金额不对头.很可能是从明细上漏掉了某1笔或几笔.如果已知明细账目清单,能通过编程找到漏掉的是哪1笔或几笔吗? 如果有多种可能,则输出所有可能的情况. 我们规定:用户输 ...

  4. Android中进行流量统计

    // ---------------------流量统计-------------------------------- try { PackageManager pm = getPackageMan ...

  5. Python文件或目录操作的常用函数

    ◆ os.listdir(path) Return a list containing the names of the entries in the directory given by path. ...

  6. 自学JavaScript的几个例子

    学习了广泛使用的浏览器脚本JavaScript和HTML的DOM模型(也是用JavaScript实现),下面给出两个自己学习时的例子,具体JavaScript语法请参考W3C相关网页(http://w ...

  7. jsoup UnsupportedMimeTypeExceptio

    Exception in thread "main" <strong><span style="font-size:18px;">org ...

  8. SQL学习之使用视图

    1.简介:视图是虚拟的表.与包含的数据不一样,视图只包含使用时动态检索数据的查询.重点:视图是一个查询,不是一个表!

  9. Java环境的配置

    JAVA环境: 1.打开我的电脑--属性--高级--环境变量 2.将相应的JDK环境下载到本机,将路径保存到无中文路径中,并将路径复制下来. 3.在环境变量--系统变量,中新建 变量名:JAVA_HO ...

  10. ubuntu, Debian, CentOS

    ubuntu源自debian,内核很多文档都还是debian的字样,稳定性逐渐增强,基本满足日常开发. debian的核心稳定,性能强劲. centos的内核版本低,安全性高. 选择Debian是因为 ...