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

Oracle 在不知道文件名的情况下,使用UTL_file.FRemove从服务器中删除文件,oracle,stored-procedures,plsql,wildcard,utl-file,Oracle,Stored Procedures,Plsql,Wildcard,Utl File,我是一名报告分析师,被要求学习一些PL/SQL来自动化一些流程。所以我几乎完成了,但有一步挡住了我的去路。我有一个包裹 加载带有我编写的查询的表。 将该表中的结果导出到服务器上的一个.txt文件中,并在文件名上加上当前的_日期。 我试图删除它使用通配符创建的3个文件,但我不断收到错误,例如vendor_file.ia.*.txt未定义: 文件位置是我的路径 我可以删除它,但没有问题: utl_file.fremove(file_location,'vendor_file.ia.09.02

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

加载带有我编写的查询的表。 将该表中的结果导出到服务器上的一个.txt文件中,并在文件名上加上当前的_日期。 我试图删除它使用通配符创建的3个文件,但我不断收到错误,例如vendor_file.ia.*.txt未定义:

文件位置是我的路径 我可以删除它,但没有问题:

    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中

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

非常感谢

旧帖子,但是

可以使外部表列出目录文件的内容。
然后,您可以编写一个循环,从外部表中获取文件名并执行utl_file.fremove。您可以使用预处理器运行shell脚本来删除文件。

这可用于清除Oracle目录中的多个文件 开始 对于“从选择文件名中选择”中的“i”,请选择“从中选择* tableRDSADMIN.RDS_FILE_UTIL.LISTDIR'DIR_NAME'按mtime排序,其中文件名如下 “备份%” 环 UTL_FILE.FREMOVE'DIR_NAME',i.filename; 端环; 终止 /
我们如何使用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;
    /

要调用fremove,您必须知道确切的文件名。你不能通过外卡。如果你不介意一些黑客攻击,特别是依赖x$表,你可以使用dbms\u backup\u restore列出目录中的文件,或者你可以使用Java存储过程,我的解决方案是创建一个带有两个字段的表1 filename,2 deleted\u flag。创建该表时,将文件名写入该表,然后准备删除该文件时,查找未标记为已删除的任何文件名,将其删除,并在表中将记录标记为已删除。@ShaunPeterson-或仅在其中包含文件名的表中。当文件被删除时,删除表中的行。@BobJarvis这将起作用,我将倾向于进行审计,这样我就可以看到创建/删除了哪些文件,以便进行调试/跟踪。非常感谢您的帮助,伙计们!我要试着用这个名字做一张桌子。黑客可能超出了我的技能范围。注意:RDSADMIN是一个AWS包,因此它显然只在RDS中有意义。