使用 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
.
此外,这做出了一个很大的假设,即文件名都具有相同的结构,只是末尾的数字不同(如您问题中的示例所示)。
我正在寻找数据文件中存在的最大文件名。
询问:
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
.
此外,这做出了一个很大的假设,即文件名都具有相同的结构,只是末尾的数字不同(如您问题中的示例所示)。