使用 MAX 时检查最高数据文件名时出错

Error in checking highest datafile name while using MAX

我正在寻找数据文件中存在的最大文件名。 询问: select max(file_name) from dba_data_files where tablespace_name='XYZ';

以上查询仅检测数据文件是否来自 abc[0-9].dbf。 查询不显示文件 abc10.dbf,即使它存在。 它显示 abc9.dbf。 有没有其他方法可以获取数据文件的最高文件名?

分析了一会儿。 我在查询中按 file_name 下达了命令。 这是输出。

/.../data01/odam1.dbf
/.../data01/odam10.dbf
/.../data01/odam2.dbf
....................
/../data01/odam9.dbf

也许 max 函数检测到最后一个文件名,这就是为什么显示 odam9.dbf 而不是 odam10.dbf。

对于您显示的文件名,您可以按长度和名称排序:

select file_name
from dba_data_files
where tablespace_name = 'XYZ'
order by len(filename) desc, file_name desc
fetch first 1 row only;

注意:长度函数可能是 length(),具体取决于数据库。有些数据库将 fetch first 1 row only 拼写为 limit 甚至 select top.

此外,这做出了一个很大的假设,即文件名都具有相同的结构,只是末尾的数字不同(如您问题中的示例所示)。