可以在下面的脚本中添加一个特定列的最大值(每个列都有相同名称的列):
select
owner,
table_name,
round((num_rows*avg_row_len)/(1024*1024)) MB,
num_rows "ROWS",
last_analyzed
--max(data_for_each_column)
from all_tables
where owner = 'OAP'
order by table_name asc
答案 0 :(得分:2)
如果所有表都有一个公共列,则可以使用带有XML的hack为每个表动态创建select max()
:
select owner,
table_name,
round((num_rows*avg_row_len)/(1024*1024)) MB,
num_rows "ROWS",
last_analyzed,
dbms_xmlgen.getxmltype('SELECT max(id) m FROM '||owner||'.'||table_name).extract('//text()').getnumberval() as max_id
from all_tables tbl
where owner = 'OAP'
and exists (select 1
from all_tab_columns ac
where ac.owner = tbl.owner
and ac.table_name = tbl.table_name
and ac.column_name = 'ID')
order by table_name asc;
您需要使用正确的列名替换max(id)
。
如果至少有一个表没有名为id
的列,则查询将失败 - 它不会只是"跳过"那张桌子。使用and exists (..)
条件仅使用具有名为ID
的列的表。
dbms_xmlgen.getxmltype()
将运行传递的SQL查询并返回结果集的XML表示,如:
<ROWSET>
<ROW>
<M>42</M>
</ROW>
</ROWSET>
extract('//text()')
只是提取结果中的(仅)文本值'42'
,而getnumberval()
会将其转换为实数。