FCLOSE 프로시저
파일 핸들을 이용해 연 파일을 닫는다.
UTL_FILE.FCLOSE (
file IN OUT FILE_TYPE );
• file: FOPEN이나 FOPEN_NCHAR로 연 파일 핸들러
그럼 지금까지 배운 내용을 토대로 매개변수로 디렉토리명과 파일명을 받아 이 파일을 읽어 RAW 타입으로 반환하는 함수를 만들어 보자. 굳이 RAW 타입으로 반환하는 이유는, 이메일에 첨부할 파일을 RAW 타입으로 넘겨야 하기 때문이다.
입력
CREATE OR REPLACE FUNCTION fn_get_raw_file ( p_dir VARCHAR2,
p_file VARCHAR2)
RETURN RAW
IS
vf_buffer RAW(32767);
vf_raw RAW(32767); --반환할 파일
vf_type UTL_FILE.FILE_TYPE;
BEGIN
-- 파일을 바이트모드로 읽는다.
-- p_dir : 디렉토리명, p_file : 파일명, rb: 바이트모드로 읽기
vf_type := UTL_FILE.FOPEN ( p_dir, p_file, 'rb');
-- 파일이 오픈됐는지 IS_OPEN 함수를 이용해 확인.
IF UTL_FILE.IS_OPEN ( vf_type ) THEN
-- 루프를 돌며 파일을 읽는다.
LOOP
BEGIN
-- GET_RAW 프로시저로 파일을 읽어 vf_buffer 변수에 담는다.
UTL_FILE.GET_RAW(vf_type, vf_buffer, 32767);
-- 반환할 RAW 타입 변수에 vf_buffer를 할당.
vf_raw := vf_raw || vf_buffer;
EXCEPTION
-- 더 이상 가져올 데이터가 없으면 루프를 빠져나간다.
WHEN NO_DATA_FOUND THEN
EXIT;
END;
END LOOP;
END IF;
-- 파일을 닫는다.
UTL_FILE.FCLOSE(vf_type);
-- RAW 타입 변수를 반환
RETURN vf_raw;
END;
결과
FUNCTION FN_GET_RAW_FILE이(가) 컴파일되었습니다.