oracle 统计当前用户下所有表的数据量

统计当前登陆用户下的所有表的数据量(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_1table_tmp_2这两个中间临时表drop掉,最后表名表说明此表字段数此表数据量就在table_tongji静静等你了。

页脚长点我觉得好看

~\(≧▽≦)/~

空白行居然只算一行(╬▔皿▔)凸

垃圾markdown(╬▔皿▔)凸

oracle 统计当前用户下所有表的数据量

上一篇:MySQL 8.0相对于5.7的复制改进,都有哪些呢?


下一篇:从数据库中查询大量数据时SqlHelper查询超过30秒报错的处理