제55장 UTL_FILE

내용 목차

55.1. 개요
55.2. 프러시저
55.2.1. FCLOSE
55.2.2. FCLOSE_ALL
55.2.3. FCOPY
55.2.4. FFLUSH
55.2.5. FGETATTR
55.2.6. FREMOVE
55.2.7. FRENAME
55.2.8. FSEEK
55.2.9. GET_LINE
55.2.10. GET_RAW
55.2.11. NEW_LINE
55.2.12. PUT
55.2.13. PUTF
55.2.14. PUT_RAW
55.2.15. PUT_LINE
55.3. 함수
55.3.1. FGETPOS
55.3.2. FOPEN
55.3.3. IS_OPEN

본 장에서는 UTL_FILE 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명한다.

UTL_FILE은 운영체제에서 관리하는 파일에 접근하기 위한 함수와 프러시저를 제공하는 패키지이다. 파일의 경로는 디렉터리명으로 지정할 수 있다.

UTL_FILE 패키지에서 정의된 타입과 예외 상황은 다음과 같다.

  • 타입

    FILE_TYPE의 타입은 파일 식별자로 사용된다.

    TYPE FILE_TYPE IS RECORD
    (
        id       BINARY_INTEGER, 
        datatype BINARY_INTEGER
    );
  • 예외 상황

    예외 상황설명
    INVALID_PATH파일의 경로가 유효하지 않은 경우이다.
    INVALID_MODE유효하지 않은 모드를 사용한 경우이다.
    INVALID_FILEHANDLE유효하지 않은 파일 핸들에 파일 연산을 하는 경우이다.
    INVALID_OPERATION파일에 대한 연산을 수행할 수 없는 경우이다.
    READ_ERROR읽기 연산 중에 에러가 발생하는 경우이다.
    WRITE_ERROR쓰기 연산 중에 에러가 발생하는 경우이다.
    INTERNAL_ERROR예기치 못한 에러가 발생하는 경우이다.
    FILE_OPEN파일이 열려 있어서 해당 연산을 수행할 수 없는 경우이다.
    INVALID_MAXLINESIZE

    FOPEN 함수를 사용할 때 max_linesize 값이 유효하지 않은 경우이다.

    max_linesize 값은 1과 32767bytes 사이의 값이어야 한다.

    INVALID_FILENAME파일 이름이 유효하지 않은 경우이다.
    ACCESS_DENIED해당 파일에 대한 접근 권한이 없는 경우이다.
    INVALID_OFFSET

    다음과 같이 유효하지 않은 오프셋이 주어진 경우이다.

    • 상대 오프셋과 절대 오프셋이 모두 NULL일 때 유효하지 않다.

    • 절대 오프셋이 음수일 때 유효하지 않다.

    • 오프셋이 파일 끝의 위치를 초과했을 때 유효하지 않다.

    DELETE_FAILEDDELETE 연산이 실패한 경우이다.
    RENAME_FAILEDRENAME 연산이 실패한 경우이다.

본 절에서는 UTL_FILE 패키지에서 제공하는 프러시저를 알파벳 순으로 설명한다.

파일을 닫는 프러시저이다.

FCLOSE 프러시저의 세부 내용은 다음과 같다.

현재 세션에 열린 모든 파일을 닫는 프러시저이다.

FCLOSE_ALL 프러시저의 세부 내용은 다음과 같다.

  • 프로토타입

    PROCEDURE FCLOSE_ALL;
  • 예외 상황

    • WRITE_ERROR

  • 예제

    CREATE OR REPLACE DIRECTORY USER_PATH AS '/HOME/TIBERO/PATH';
    
    DECLARE
        outfile   UTL_FILE.FILE_TYPE;
        appfile   UTL_FILE.FILE_TYPE;
        path       VARCHAR(10);
    BEGIN
        path := 'USER_PATH';
    
        outfile := UTL_FILE.FOPEN(path, 'output_file.txt', 'w');
        appfile := UTL_FILE.FOPEN(path, 'append_file.txt', 'w');
    
        UTL_FILE.FCLOSE_ALL;
    END;
    /

아직 파일에 쓰지 않고 버퍼에 남아 있는 데이터를 파일에 쓰는 프러시저이다. 데이터는 반드시 EOL 문자로 끝나야 한다.

FFLUSH 프러시저의 세부 내용은 다음과 같다.

파일 포인터의 위치를 변경하는 프러시저이다.

FSEEK 프러시저의 세부내용은 다음과 같다.

EOL 문자 또는 파일이 끝날 때까지의 내용을 읽어 오는 프러시저이다. FOPEN 함수에서 지정한 max_linesize 이상을 읽어 올 수 없다.

GET_LINE 프러시저의 세부 내용은 다음과 같다.

파일에 문자열을 넣을 때 사용하는 프러시저이다.

PUT 프러시저의 세부 내용은 다음과 같다.

형식화된 PUT 프러시저이다. PUTF의 형식화된 문자열은 C언어에서 표준 입출력(standard I/O)의 fprintf에서의 형식화된 문자열과 동일하게 %s와 이스케이프 문자를 포함한다. 이스케이프 문자로 \n을 사용할 수 있으며 %s는 그 뒤에 나오는 인수 문자열을 대체한다.

예를 들어 다음과 같은 세 개의 인수가 있다고 가정하면,

arg1 = 'string1'; 
arg2 = 'string2'; 
arg3 = 'string3'; 

위의 세 개의 인수를 사용하는 형식화된 문자열은 다음과 같다.

utl_file.putf( ofile, 'This is example of formatted string : %s %s %s \n',
               arg1, arg2, arg3);

또한 위의 내용이 실행되면 다음과 같은 내용이 출력된다.

This is example of formated string : string1 string2 string3

PUTF 프러시저의 세부 내용은 다음과 같다.

본 절에서는 UTL_FILE 패키지에서 제공하는 함수를 알파벳 순으로 설명한다.

파일을 여는 함수이다. 최대 50개의 파일을 동시에 열 수 있다.

FOPEN 함수의 세부 내용은 다음과 같다.