在不知道文件名的情况下使用 UTL_FILE.FRemove 从服务器删除文件

Delete file from server using UTL_FILE.FRemove without knowing the file name

我是一名报告分析师,他被要求学习一些 PL/SQL 来自动化一些流程。所以我几乎完成了,还有一步挡住了路。我有一个包裹

  1. 使用我编写的查询加载 table。
  2. 将 table 的结果导出到服务器上的一个 .txt 文件,文件名上附加 current_date。

我试图删除它使用通配符创建的 3 个文件,但我不断收到诸如 "vendor_file.ia.*.txt is not defined" 之类的错误:

我可以毫无问题地删除它:

    utl_file.fremove(file_location,'vendor_file.ia.09.02.2015.txt');
    utl_file.fremove(file_location,'vendor_file.il.09.02.2015.txt');
    utl_file.fremove(file_location,'vendor_file.sd.09.02.2015.txt'); 

但很明显,当它下个月达到 运行 时,不会删除它。所以我是否缺少一个简单的通配符来搜索 'vendor_file.ia.*' 并且语法在 Oracle 中查找?

如果我没有提供足够的信息,请告诉我!

非常感谢!

旧 post 但是...

你可以使外部table列出一个目录文件的内容。 然后你可以写一个循环从外部 table 获取你的文件名并执行 utl_file.fremove

您可以使用预处理器 运行 一个 shell 脚本来删除文件。 Oracle docs on preprocessor

这可用于清除 Oracle 目录中的多个文件
begin for i in (select filename from (select * from table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DIR_NAME')) order by mtime) where filename like 'backup%') loop UTL_FILE.FREMOVE ('DIR_NAME', i.filename ); end loop; end; /

我们如何使用 Oracle 调度程序调度此脚本:

 begin
    for i in (select filename from (select * from 
    table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DIR_NAME')) order by mtime) where filename like 
    'backup%')
    loop
    UTL_FILE.FREMOVE ('DIR_NAME', i.filename );
    end loop;
    end;
    /