2015-09-02 81 views
0

我是一名报告分析师,被要求学习一些PL/SQL以自动执行某些过程。所以我差不多完成了,一步一步阻止。我有一个包使用UTL_FILE.FRemove从服务器上删除文件而无需知道文件名

  1. 用我写的查询加载表。
  2. 将该表的结果导出到服务器上的.txt文件中,同时将current_date添加到文件名上。

我试图删除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吗?

如果我没有提供足够的信息,请让我知道!

非常感谢!

+1

您必须知道确切的文件名才能调用fremove。你不能传递通配符。如果你不介意一些hackery(特别是依靠'x $'表),你可以使用'dbms_backup_restore'来列出目录中的文件https://davidalejomarcos.wordpress.com/2011/09/13/how-to -list-files-on-a-directory-from-oracle-database /或者您可以使用Java存储过程https://asktom.oracle.com/pls/apex/f?p=100:11:0 :: :: P11_QUESTION_ID:439619916584 –

+3

我的解决方案是创建一个包含两个字段的表1)filename,2)deleted_flag。将文件名写入该表中,然后在准备删除文件时查找未标记为已删除的文件名并将其删除,并将该记录标记为在表中删除。 –

+2

@ShaunPeterson - 或者只是一个包含文件名的表格。删除文件时删除表中的行。 –

回答

1

旧的帖子,但...

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

相关问题