统计当前登陆用户下的所有表的数据量(oracle)
在工作中遇到这么个问题,领导下午快下班要我统计所有表的数据量,我尼玛全库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(╬▔皿▔)凸