思路是有,但水平有限,用得也不熟,还是写不出来。
查询某用户所有表的名称可用:select table_name from user_tables;
查询单表大小的写法:select sum(bytes)/(1024*1024) as "size(M)" from user_segments
where segment_name=upper('表名');
但怎么整合,连起来写,并按大小排序列出,一时想不出,请各位大虾指教,多谢。
------解决思路----------------------
-- 如果没有 LOB 字段的话,可以简单的使用下面的方法
SQL> select t.table_name , x."size(MB)"
2 from user_tables t left join
3 (select segment_name , sum(bytes) / 1024 / 1024 As "size(MB)"
4 from user_segments
5 group by segment_name ) x
6 on t.table_name = x.segment_name ;
TABLE_NAME size(MB)
------------------------------ ----------
A1 .0625
A2 .0625
------解决思路----------------------
select t.table_name , x."size(MB)"
from user_tables t left join
(select segment_name , sum(bytes) / 1024 / 1024 As "size(MB)"
from user_segments
group by segment_name ) x
on t.table_name = x.segment_name
order by 2 desc ; -- 用这个排序。