読みたいファイルが存在するかどうかを確認しようとしています。
31904 次
3 に答える
11
別のアプローチは次のとおりです。
パッケージの使用
BFILE
とfileexists
機能:dbms_lob
create or replace function FileExists( p_DirName in varchar2, -- schema object name p_FileName in varchar2 ) return number is l_file_loc bfile; begin l_file_loc := bfilename(upper(p_DirName), p_FileName); return dbms_lob.fileexists(l_file_loc); -- 1 exists; 0 - not exists end;
パッケージ
fgetattr
の機能を使用する:utl_file
create or replace function FileExists( p_DirName in varchar2, -- schema object name p_FileName in varchar2 ) return number is l_fexists boolean; l_flen number; l_bsize number; l_res number(1); begin l_res := 0; utl_file.fgetattr(upper(p_DirName), p_FileName, l_fexists, l_flen, l_bsize); if l_fexists then l_res := 1; end if; return l_res; end;
于 2012-12-21T06:03:31.163 に答える
2
ファイルが存在するかどうかをチェックする関数を作成するのは、ファイルを開こうとして例外をキャッチするだけでかなり簡単です(この例の関数はAskTomから取得したものです) 。
CREATE OR REPLACE FUNCTION file_exists(p_fname IN VARCHAR2) RETURN BOOLEAN
AS
l_file UTL_FILE.FILE_TYPE;
BEGIN
l_file := UTL_FILE.FOPEN(SUBSTR( p_fname, 1, instr(p_fname,'/',-1) ),
SUBSTR( p_fname, instr( p_fname, '/', -1)+1 ), 'r' );
UTL_FILE.FCLOSE( l_file );
RETURN TRUE;
EXCEPTION
WHEN UTL_FILE.INVALID_PATH THEN RETURN FALSE;
WHEN UTL_FILE.INVALID_OPERATION THEN RETURN FALSE;
END;
/
その後、あなたはただ使うことができます。
IF ( file_exists( 'MED_LIST_19_OCT_12.csv' ) )
...
于 2012-12-20T22:05:26.157 に答える
1
関数を使用UTL_FILE.FGETATTR
します。この関数は、この目的のために特別に設計されています。
構文:
UTL_FILE.FGETATTR(
location IN VARCHAR2,
filename IN VARCHAR2,
fexists OUT BOOLEAN,
file_length OUT NUMBER,
block_size OUT BINARY_INTEGER);
例:
DECLARE
fexists BOOLEAN;
file_length NUMBER;
block_size BINARY_INTEGER;
BEGIN
UTL_FILE.FGETATTR('MY_ORA_DIRECTORY', 'my_file_name.csv', fexists, file_length, block_size);
IF fexists THEN
-- Do something
-- ...
END IF;
END IF;
Oracleドキュメント:
https
://docs.oracle.com/database/121/ARPLS/u_file.htm#ARPLS70915
もう1つの便利なリンク:
https ://www.foxinfotech.in/2018/09/how-to-check-if -file-exists-in-pl-sql.html
于 2019-03-12T11:11:25.017 に答える