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;
GE_OG_CALC_COLUMN_EMPTY的更多相关文章
随机推荐
- Handlebarsjs学习笔记
handlebarsjs官网(http://handlebarsjs.com/) 1.引入模板 在html页面中添加 <script id="entry-template&q ...
- 加入收藏夹的js代码(求兼容chrome浏览器的代码)
从网上找了加入收藏夹的js代码,但不兼容chrome,不知道有没有兼容chrome的相关代码,希望有知道的告诉一下,谢谢! 代码如下 $("#id").click(function ...
- Date Time Picker控件
Step1 在界面中添加一个Date Time Picker控件,ID为:IDC_DATETIMEPICKER1 Step2 该控件关联变量 CDateTimeCtrl m_dateCtrl; Ste ...
- 编写可维护的JS 04
4.变量.函数和运算符 变量 变量声明提前,单var 函数声明 先声明fn再执行 函数声明不应出现在语句块中 函数调用间隔 函数名与左括号间无间隔 立即调用函数 (fuction(){}) 严格模式 ...
- SQL学习之Insert的特殊用法(插入检索出的数据,表之间的数据复制)
1.插入检索出的数据 select * from dbo.Customers_1
- 怎么增加照片的KB大小
之前都是要想办法压缩图片的大小 今天有人发来一张1.8MB的图片让我帮忙调到30MB左右 一下子放大这么多着实有点茫然 之后想到了一个办法 首先把图片占用体积变大,是不会增加清晰度的,而减小占用体积却 ...
- 2014.9.16HTML表单CSS
(一)表格 合并单元格(少用) (合并列) 1.先选中要合并的2个或多个单元格,然后点击以下图标 代码:<td colspan="2"> </td> 2.设 ...
- SQL知识三(Day 27)
大家好,好几天都没写博客了.因为自己的一些原因,落下了很多.今天没有学什么新的知识,自己就把以前落下的好好看了一下.好了,今天就先总结一下SQL剩下的一些知识吧. 主要学的知识有:循环语句(case语 ...
- 堆分配与栈分配---SAP C++电面(5)/FEI
一直以来总是对这个问题的认识比较朦胧,我相信很多朋友也是这样的,总是听到内存一会在栈上分配,一会又在堆上分配,那么它们之间到底是怎么的区别呢?为了说明这个问题,我们先来看一下内存内部的组织情况. 从上 ...
- R与数据分析旧笔记(三)不知道取什么题目
连线图 > a=c(2,3,4,5,6) > b=c(4,7,8,9,12) > plot(a,b,type="l") 多条曲线效果 plot(rain$Toky ...