我正在开发一个从目录传递文件名作为in_file_name
参数的包,但是调用程序也传递了子目录名,它不应该。现在,如果in_file_name
是子目录,我通过执行以下操作来中止包:
IF in_file_name IN ('sub_dir_1','sub_dir_2','sub_dir_3')
THEN
RETURN;
END IF;
但是,如果创建了任何新目录,我可以预见将来的问题。有没有办法检查in_file_name
是否是一个目录而不是硬编码名称?
我能想到的一种可能性是运行UTIL_OS.run_cmd('echo */')
来获取目录列表。但是我不确定如何获得输出并在IF
语句中使用它。
谢谢!
答案 0 :(得分:2)
假设您正在使用目录对象,并且传递的文件名是其下的文件(或目录),您可以使用utl_file.fgetattr()
procedure来测试它;如果传递的名称是文件,fexists
标志将为true,如果它不存在或者是目录而不是普通文件,则它将为false。 (这似乎没有记录;但它至少在Linux上是如何工作的。)
所以你需要声明一些额外的变量,但是可以这样做:
utl_file.fgetattr(
location => your_directory,
filename => in_file_name,
fexists => l_fexists,
file_length => l_file_length,
block_size => l_block_size);
if not l_fexists then
-- handle file not existing OR being a directory
end if;