在工作中遇到这么个问题,领导下午快下班要我统计所有表的数据量,我尼玛全库2000+的表呢,还好我脑子还行,要不然这一宿就干下去了
我真是个小机灵鬼d=====( ̄▽ ̄*)b,果然科学技术是第一生产力
我就记下这个小功能,备我以后使用,编写存储过程统计表的数据量
首先是存储过程
create or replace procedure tongjishuju
as
v_culm varchar(30);
v_sql_str varchar(255);
CURSOR c_name IS select distinct table_name from user_tab_columns;
begin
OPEN c_name;
loop
FETCH c_name INTO v_culm;
exit when c_name%notfound;
v_sql_str :=‘insert into shujuliang select ‘‘‘||v_culm||‘‘‘ as table_name ,count(*) as shujul from ‘||v_culm;
execute immediate v_sql_str;
end loop;
close c_name;
commit;
end;
在运行存储过程之前,先要有个表来存统计出来的数据量,表结构如下:(如果字段长度不够,自己再扩一下)
create table SHUJULIANG
(
table_name VARCHAR2(30),
shujul INTEGER
)
你如果还想统计表的字段数和表的comments,可以(前面这个单词应该没写错,我不管,写错我也不管了ε=ε=ε=(~ ̄▽ ̄)~)。
create table table_tmp_1 as select a.TABLE_NAME as 表名,count(*) as 字段数 from user_tab_columns a group by a.TABLE_NAME;
create table table_tmp_2 as select a.表名,a.字段数,b.comments as 表说明 from table_tmp_1 a join user_tab_comments b on a.表名=b.table_name;
create table table_tongji as select a.表名,a.表说明,a.字段数,b.shujul as 数据量 from table_tmp_2 a join SHUJULIANG b on a.表名=b.table_name;
最后再把table_tmp_1
和table_tmp_2
这两个中间临时表drop
掉,最后表名
、表说明
、此表字段数
、此表数据量
就在table_tongji静静等你了。
页脚长点我觉得好看
~\(≧▽≦)/~
空白行居然只算一行(╬▔皿▔)凸
垃圾markdown(╬▔皿▔)凸
原文:https://www.cnblogs.com/nightmareraid/p/13158877.html