首页 > 解决方案 > 仅在第二个代码块中遇到“ORA-29283:无效文件操作”(第一个块也成功执行,它也使用 UTL_FILE)

问题描述

我有一个包含 2 个代码块的 SQL 文件,它们都使用 UTL_FILE 函数在同一目录中写入 2 个不同的文件。

我遇到的问题是第一个代码块执行成功,但是在执行第二个代码块时我遇到 ORA-29283: invalid file operation。

我的代码如下:

DECLARE
   fileHandler UTL_FILE.FILE_TYPE;
   vline varchar2(4000);
 BEGIN
   fileHandler := UTL_FILE.FOPEN('STAGING_REPORT', 'Report_1.csv', 'W',4000);

    UTL_FILE.FCLOSE(fileHandler);

end;
/

DECLARE
   fileHandler UTL_FILE.FILE_TYPE;
   vline varchar2(4000);
 BEGIN
   fileHandler := UTL_FILE.FOPEN('STAGING_REPORT', 'Report_2.csv', 'W',4000);

   UTL_FILE.FCLOSE(fileHandler);

end;
/ 

当我尝试在 SQLDeveloper 上执行此操作时,我首先分别执行了两个块。在那种情况下,第一个块成功执行,但第二个块抛出 ORA-29283。

在第二次尝试中,我尝试同时执行两个块,即同时选择它们并点击 RUN。在这种情况下,我的第一个块也成功执行,但我的第二个块没有。

经过无数次这样的尝试,目前,这两个块都抛出了 ORA_29283 错误。

STAGING_REPORT 中没有报告文件(REPORT_1 和 REPORT_2)。UTL_FILE.FOPEN 在运行时创建它们。

奇怪的是这段代码在半周前成功执行,然后突然出现异常。

我在 Oracle 12c 上运行。我在这里缺少什么具体的东西吗?

(我已经检查了权限和其他基本的东西,比如对目录的权限以及目录是否存在,正如我之前提到的,这段代码在半周前执行,当我手动执行时它部分执行)

我也尝试过为这两个块使用两个不同的处理程序名称,但没有成功

标签: oracleplsqlutl-file

解决方案


在第二个查询中,您错过了文件扩展名。添加.csv或其他扩展名,因此文件操作无效。


推荐阅读