더북(TheBook)
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이(가) 컴파일되었습니다.
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.