ファイルが存在しない場合、そのエラーが発生します。あなたのコードでは、ファイルが存在する場合、次のようになります。
anonymous block completed
The File exists
ただし、ファイルが存在しない場合は、次のようになります。
Error report -
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 6
29283. 00000 - "invalid file operation"
*Cause: An attempt was made to read from a file or directory that does
not exist, or file or directory access was denied by the
operating system.
*Action: Verify file and directory access privileges on the file system,
and if reading, verify that the file exists.
エラーの説明の「存在しないファイルまたはディレクトリ」の部分に注意してください。このようにファイルの存在をテストすることはできません。私の知る限り、そこにファイルがあるかどうかを直接テストする方法はありません。ファイルを開いて例外をキャッチする必要があります。例えば:
DECLARE
vInHandle utl_file.file_type;
eNoFile exception;
PRAGMA exception_init(eNoFile, -29283);
BEGIN
BEGIN
vInHandle := utl_file.fopen('IMG_UTL_DIR', 'image-file.csv', 'R');
dbms_output.put_line('The File exists');
EXCEPTION
WHEN eNoFile THEN
dbms_output.put_line('The File not exists');
END;
END fopen;
/
anonymous block completed
The File not exists
ただし、説明にあるように、ORA-29283 例外は他のことも意味する可能性があるため、必ずしもファイルが存在しないことを意味するわけではありません。また、実際のエラーの場所をある程度マスクします。ブロック内に複数のファイル操作がある場合は、それぞれを独自の begin/exception/end サブブロックでラップしてエラーを指定する必要があります。 、または実際のエラーポイントを失います。
dbms_output
おそらく、例外をキャッチして、クライアントによって取得および表示されない可能性のあるメッセージに置き換えるよりも、例外を自然に発生させて報告する方がよいでしょう。