【发布时间】:2018-01-16 09:29:24
【问题描述】:
我想在Oracle中获取数据库中每个表的大小
所以我试着用这种方式来做
参考
select
table_name,
to_number(
extractvalue(
xmltype(
dbms_xmlgen.getxml('select count(*) c from '||table_name))
,'/ROWSET/ROW/C')) count
from
user_tables
order by
table_name;
尝试查询
select
table_name,
to_number(
extractvalue(
xmltype(
dbms_xmlgen.getxml('select bytes/1024/1024 from user_segments where segment_name="' || table_name|| '"'))
,'/ROWSET/ROW/C')) count
from
user_tables
order by
table_name;
但如果没有 for 循环,我将无法获得它。
【问题讨论】:
-
如果您想直接访问
user_tables中可用的列,则不需要 XML 内容。 XML“hack”只是在常规查询中运行动态 SQL 的一种解决方法(不恢复为 PL/SQL) -
索引空间怎么样?
-
如果您确实需要计算每个表中的行数,而不是相信
dbms_stats捕获的num_rows,那么select count(*) * 10 from some_table sample block(10)的一些变体将更有效地给出近似值。
标签: sql oracle plsql oracle11g