使用UTL_FILE.FRemove从服务器删除文件,而不知道文件名

时间:2015-09-02 21:06:17

标签: oracle stored-procedures plsql wildcard utl-file

我是一名报告分析师,他被要求学习一些PL / SQL以自动化某些流程。所以我差不多完成了,只有一步挡在路上。我有一个包

  1. 用我写的查询加载一个表。
  2. 将该表中的结果导出到服务器上的.txt文件中,并将current_date添加到文件名上。
  3. 我正在尝试使用通配符删除它创建的3个文件,但我不断收到错误,例如“vendor_file.ia。*。txt未定义”:

    • file_location是我的路径

    我可以删除它没问题:

        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中查找?

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

    非常感谢!

4 个答案:

答案 0 :(得分:1)

旧帖但......

您可以将外部表列出目录文件内容。 然后,您可以编写一个循环以从外部表中获取文件名并执行utl_file.fremove

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这可用于清除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; /

答案 3 :(得分:-1)

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

 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;
    /