我需要创建一个选择查询来查找 ID 列中的最高值,其中序列在包含数百个表的整个数据库中“共享”。 (请注意,该序列在 SQL Developer 中并不作为正式序列存在)
数据库(我没有创建/拥有)为任何连续表中的每条记录创建一个唯一的 ID,并附加后缀。
即 表1
ID
0001AAA
0002AAA
0003AAA
0006AAA
表2
ID
0004BBB
0005BBB
0007BBB
我想找到整个数据库的数字序列(忽略后缀)的最大值。
即 0007
我很满意我可以在几个表上创建联合查询,以找到最佳答案:
select to_number(substr(oid,1,length(oid)-3)) from table1
union
select to_number(substr(oid,1,length(oid)-3)) from table2
union
select to_number(substr(oid,1,length(oid)-3)) from table3
order by 1 desc)
where rownum=1
但我不想添加每个命名表。相反,我想在任何具有列名 OID 的表中创建并集。
您可以使用oracle cols table来实现您的要求。
select
case when row_number = max(row_number) over() then replace(query, 'union all', '')
else query end as query
from
(select distinct 'select ' || to_number(substr(oid,1,length(oid)-3)) || ' from ' || table_name || ' union all ' as query, rownum as row_number, column_name, table_name
from cols where upper(column_name) in ('ODI'))
order by row_number;