統計當前登陸用戶下的所有表的數據量(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(╬▔皿▔)凸