1

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

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

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

  • 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

4 回答 4

2

旧帖子但是...

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

于 2016-03-22T16:00:38.520 回答
2

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

于 2019-06-13T21:55:58.950 回答
0

您可以使用预处理器运行 shell 脚本来删除文件。 关于预处理器的 Oracle 文档

于 2017-11-15T15:51:00.417 回答
-1

我们如何使用 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;
    /
于 2020-09-02T12:40:04.083 回答