天天看点

oracle统计表的所有列的非空记录数据

oracle统计表的所有列的非空记录数据

适合查询统计,每天监控表数据入库的情况,统计业务量的增长情况等。具体的需要配合自己的业务定

有两种展现方式,第一种是是执行完,直接看完输出结果。第二种是把输出结果插入到中间表,查询中间查看输出结果(未使用统计信息查询,是因为很多时候,需要知道实际的数量,而统计信息有时候不满足)

第一种方式:直接输出结果

创建存储过程

CREATE OR REPLACE PROCEDURE TEST IS

v_sql varchar2(2000);

v_rows number;

begin

  for i in (select column_name from all_tab_columns where TABLE_NAME = 'LOT') loop

   v_sql :='select count(1) from lot where '|| i.column_name ||' is not null';

   execute immediate v_sql into v_rows;

   insert into test1  values(i.column_name,v_rows);

   commit;

   end loop;

   end;

设置输出

SQL> set serveroutput on

调用存储过程

SQL> exec test;

SHIPPED_QTY2,0

SHIPPED_QTY1,0

RETICLE_RRN,0

EXECUTION_RRN,14791

WFL_STEP_PATH,14791

NEXT_JOB_RRN2,0

NEXT_JOB_RRN1,0

JOB_RRN,10

NEXT_RECIPE_STRING2,0

NEXT_RECIPE_STRING1,0

RECIPE_STRING,0

EQPT_RRN,12173

BOR_RRN,296

...........

第二种方式:插入中间表

创建中间表

create table test1(column_name varchar2(100),row_num number,table_name varchar2(100))

创建存储过程

CREATE OR REPLACE PROCEDURE TEST IS

v_sql varchar2(2000);

v_rows number;

begin

  for i in (select column_name from all_tab_columns where TABLE_NAME = 'LOT') loop

   v_sql :='select count(1) from lot where '|| i.column_name ||' is not null';

   execute immediate v_sql into v_rows;

   insert into test1  values(i.column_name,v_rows);

   commit;

   end loop;

   end;

执行存储过程

查看输出结果

SQL> select * from test1;

COLUMN_NAME                                                    ROW_NUM TABLE_NAME

--------------------------------------------------------------- ---------- --------------------------------------------------------------------------------

CREATED_PLAN_LOT_RRN                                  15154      LOT

HOT_FLAG                                                               15154      LOT

PRIORITY                                                                 15154      LOT

STARTED_FLAG                                                      15154      LOT

STARTED_TIMESTAMP                                          15154       LOT

CREATE_CATEGORY                                             15154       LOT

CREATED_TIMESTAMP                                          15154       LOT

END_TIMESTAMP                                                    369           LOT

DUE_DATE                                                                 205          LOT