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