Sql 所有表的最大列值

Sql 所有表的最大列值,sql,oracle,Sql,Oracle,可以在下面的脚本中添加一个特定列的最大值(每个列的此列名称相同): 如果所有表都有一个公共列,您可以使用XML攻击为每个表动态创建一个select max(): select owner, table_name, round((num_rows*avg_row_len)/(1024*1024)) MB, num_rows "ROWS", last_analyzed, dbms_xmlgen.getxmltype('SELE

可以在下面的脚本中添加一个特定列的最大值(每个列的此列名称相同):


如果所有表都有一个公共列,您可以使用XML攻击为每个表动态创建一个
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
的列,则查询将失败-它不会“跳过”该表。使用
和exists(..)
条件将只使用名为
ID
的列的表


dbms_xmlgen.getxmltype()
将运行传递的SQL查询并返回结果集的XML表示形式,类似于:


42

extract('//text()')
只提取结果中的(唯一)文本值,即
'42'
getnumberval()
将其转换为实数

添加一些示例表数据和预期结果。Oracle中的“所有”选项卡“列”表可以帮助您。我需要为每个表显示最大值(一列的最大值)的列。您如何知道要从每个表中的哪个列获取数据?我必须为每个表检查相同的列。可以使用where子句跳过没有“id”的列?@PNPTestovir:您只能从整体选择中排除没有此列的表。不可能只为那些有这样一列的表运行“动态选择”如何运行(从整体选择中排除没有这样一列的表)?@PNPTestovir:请参阅我的edit@PNPTestovir:则必须排除该类型的列。
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;