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;