oracle - 仅在第二个代码块中遇到“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 上运行。我在这里缺少什么具体的东西吗?
(我已经检查了权限和其他基本的东西,比如对目录的权限以及目录是否存在,正如我之前提到的,这段代码在半周前执行,当我手动执行时它部分执行)
我也尝试过为这两个块使用两个不同的处理程序名称,但没有成功
解决方案
在第二个查询中,您错过了文件扩展名。添加.csv
或其他扩展名,因此文件操作无效。