oracle统计当前⽤户下所有表的数据量
统计当前登陆⽤户下的所有表的数据量(oracle)
下午快下班要我统计所有表的数据量,我全库2000+的表呢,还好我厉害,要不然这⼀宿就⼲下去了
我真是个⼩机灵⿁d=====( ̄▽ ̄*)b,果然科学技术是第⼀⽣产⼒
我就记下这个⼩功能,备我以后使⽤,编写存储过程统计表的数据量
⾸先是存储过程
create or replace procedure tongjishuju
oracle 新建用户
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.字段数,bments 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(╬▔⽫▔)凸