DBMS 1

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

UTL_FILE

DBMS 1
Tibero 가이드
Tibero System Package Guide
UTL_FILE
작성자
dataonair
작성일
2021-02-18 10:43
조회
1988



제29장UTL_FILE




내용 목차






29.1. 개요

29.2. 프로시저


29.2.1. FCLOSE

29.2.2. FCLOSE_ALL

29.2.3. FCOPY

29.2.4. FFLUSH

29.2.5. FGETATTR

29.2.6. FREMOVE

29.2.7. FRENAME

29.2.8. FSEEK

29.2.9. GET_LINE

29.2.10. GET_RAW

29.2.11. NEW_LINE

29.2.12. PUT

29.2.13. PUTF

29.2.14. PUT_RAW

29.2.15. PUT_LINE


29.3. 함수


29.3.1. FGETPOS

29.3.2. FOPEN

29.3.3. IS_OPEN





29.1. 개요




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과 32767byte 사이의 값이어야 한다.
    INVALID_FILENAME 파일 이름이 유효하지 않은 경우이다.
    ACCESS_DENIED 해당 파일에 대한 접근 권한이 없는 경우이다.
    INVALID_OFFSET 다음과 같이 유효하지 않은 오프셋이 주어진 경우이다.

    • 상대 오프셋과 절대 오프셋이 모두 NULL일 때 유효하지 않다.
    • 절대 오프셋이 음수일 때 유효하지 않다.
    • 오프셋이 파일 끝의 위치를 초과했을 때 유효하지 않다.
    DELETE_FAILED DELETE 연산이 실패한 경우이다.
    RENAME_FAILED RENAME 연산이 실패한 경우이다.





29.2. 프로시저




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




29.2.1. FCLOSE




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

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

  • 프로토타입
    PROCEDURE FCLOSE
    (
    file IN OUT FILE_TYPE
    );
  • 파라미터

    파라미터 설명
    file 파일 핸들이다.


  • 예외 상황

    • WRITE_ERROR
    • INVALID_FILEHANDLE
  • 예제
    CREATE OR REPLACE DIRECTORY USER_PATH AS '/HOME/TIBERO/PATH';DECLARE
    fname VARCHAR2(1024);
    BEGIN
    file := UTL_FILE.FOPEN('USER_PATH', 'MYFILE.DAT', 'r');
    UTL_FILE.FCLOSE(file);
    END;
    /






29.2.2. FCLOSE_ALL




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

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;
    /






29.2.3. FCOPY




파일의 연속되는 부분을 새로 생성된 파일에 복사하는 프로시저이다.

FCOPY 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    PROCEDURE FCOPY( 
    location IN VARCHAR2,
    filename IN VARCHAR2,
    dest_dir IN VARCHAR2,
    dest_file IN VARCHAR2,
    start_line IN BINARY_INTEGER DEFAULT 1,
    end_line IN BINARY_INTEGER DEFAULT NULL);
  • 파라미터

    파라미터 설명
    location 복사를 진행할 대상 파일이 위치할 경로의 디렉터리명이다.
    filename 복사를 진행할 대상 파일의 이름이다.
    dest_dir 복사가 진행된 이후, 파일이 위치할 경로의 디렉터리명이다.
    dest_file 복사가 진행된 이후의 파일의 이름이다.
    start_line 복사를 진행할 시작 위치이다. 파일의 라인 번호를 사용해 명시한다.기본값은 1이며, 파일의 첫 번째 의미한다.
    end_line 복사를 끝낼 종료 위치이다. start_line과 마찬가지로 라인 번호로 명시한다.기본값은 NULL이며, 파일의 마지막 라인을 의미한다.
  • 예제
    CREATE OR REPLACE DIRECTORY USER_PATH AS '/HOME/TIBERO/PATH';

    BEGIN
    UTL_FILE.FCOPY('USER_PATH', 'MYFILE.DAT', 'USER_PATH', 'MTFILE.BAK');
    END;
    /





29.2.4. FFLUSH




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

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

  • 프로토타입
    PROCEDURE FFLUSH(file IN FILE_TYPE);
  • 파라미터

    파라미터 설명
    file 파일 핸들러이다.


  • 예외 상황

    • INVALID_FILEHANDLE
    • INVALID_OPERATION
    • WRITE_ERROR
  • 예제
    CREATE OR REPLACE DIRECTORY USER_PATH AS '/home/user/path';
    DECLARE
    fhandle UTL_FILE.FILE_TYPE;
    buffer VARCHAR2(32767);
    path VARCHAR2(1024);
    fname VARCHAR2(1024);
    BEGIN
    path := 'USER_PATH';
    fname := 'MYFILE.TXT';
    fhandle := UTL_FILE.FOPEN(path, fname, 'w');
    buffer := 'This is the message for output file';
    for i in 1..10 loop
    UTL_FILE.PUT(fhandle, buffer);
    end loop;
    UTL_FILE.NEW_LINE(fhandle);
    UTL_FILE.FFLUSH(fhandle);
    UTL_FILE.FCLOSE(fhandle);
    END;
    /






29.2.5. FGETATTR




디스크 파일의 속성을 반환하는 프로시저이다.

FGETATTR 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    PROCEDURE FGETATTR (
    location IN VARCHAR2,
    filename IN VARCHAR2,
    fexists OUT BOOLEAN,
    file_length OUT NUMBER,
    blocksize OUT BINARY_INTEGER);
  • 파라미터

    파라미터 설명
    location 파일의 경로를 나타내는 디렉터리명이다.
    filename 파일의 이름이다.
    fexists 파일의 존재 여부이다.
    file_length 파일의 길이(byte)이다.
    blocksize 파일 시스템의 블록 크기(byte)이다.
  • 예제
    CREATE OR REPLACE DIRECTORY USER_PATH AS '/home/user/path';DECLARE
    info_exists BOOLEAN;
    info_flen NUMBER;
    info_bsz BINARY_INTEGER;
    etc_path VARCHAR2(1024);
    fname VARCHAR2(1024);
    BEGIN
    etc_path := 'USER_PATH';
    fname := 'hostname';
    UTL_FILE.FGETATTR(etc_path, fname, info_exists, info_flen, info_bsz); if info_exists = TRUE then
    DBMS_OUTPUT.PUT_LINE('file name :' || fname);
    DBMS_OUTPUT.PUT_LINE('file size (bytes) :' || TO_CHAR(info_flen));
    DBMS_OUTPUT.PUT_LINE('block size(bytes) :' || TO_CHAR(info_bsz));
    end if;
    END;
    /





29.2.6. FREMOVE




파일을 삭제하는 프로시저이다. 파일을 삭제하는 데 충분한 권한이 없는 경우 DELETE_FAILED 예외 상황이 발생한다.

FREMOVE 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    PROCEDURE FREMOVE(
    location IN VARCHAR2,
    filename IN VARCHAR2);
  • 파라미터

    파라미터 설명
    location 파일의 위치를 나타내는 디렉터리명이다.
    filename 파일의 이름이다.


  • 예외 상황

    • DELETE_FAILED
  • 예제
    CREATE OR REPLACE DIRECTORY USER_PATH AS '/home/user/path';BEGIN
    UTL_FILE.FREMOVE('USER_PATH', 'MYFILE.BAK');
    END;
    /






29.2.7. FRENAME




파일의 이름을 변경하는 프로시저이다. OS 셸에서 사용하는 mv 명령어와 동일하게 동작한다.

FRENAME 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    PROCEDURE FRENAME (
    location IN VARCHAR2,
    filename IN VARCHAR2,
    dest_dir IN VARCHAR2,
    dest_file IN VARVCHAR2,
    overwrite IN BOOLEAN DEFAULT FALSE);
  • 파라미터

    파라미터 설명
    location 원본 파일의 경로를 나타내는 디렉터리명이다.
    filename 원본 파일의 이름이다.
    dest_dir 변경된 파일의 경로를 나타내는 디렉터리명이다.
    dest_file 변경된 파일의 이름이다.
    overwrite 변경된 파일의 이름이 이미 존재할 경우 덮어쓸지를 지정한다.
  • 예제
    CREATE OR REPLACE DIRECTORY USER_PATH AS '/home/user/path';
    BEGIN
    UTL_FILE.FRENAME('USER_PATH', 'MTFILE.BAK', 'USER_PATH', 'MYFILE.DAT');
    END;
    /





29.2.8. FSEEK




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

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

  • 프로토타입
    PROCEDURE FSEEK (
    fid IN UTL_FILE.FILE_TYPE,
    absolute_offset IN PLS_INTEGER DEFAULT NULL,
    relative_offset IN PLS_INTEGER DEFAULT NULL
    );
  • 파라미터

    파라미터 설명
    fid UTL_FILE 패키지의 FILE_TYPE 타입의 파일 식별자이다.
    absolute_offset 절대 오프셋, 파일의 시작부터의 오프셋 값이다. (기본값: NULL)
    relative_offset 상대 오프셋, 현재 파일 포인터 위치에서 양수이면 뒤쪽, 음수이면 앞쪽 방향을 나타낸다. 절대 오프셋이 있는 경우 상대 오프셋은 무시 된다. (기본값: NULL)


  • 예외 상황

    • INVALID_OFFSET
  • 예제
    CREATE OR REPLACE DIRECTORY USER_PATH AS '/home/user/path';DECLARE
    infile UTL_FILE.FILE_TYPE;
    absolute_offset PLS_INTEGER:= 10;
    scan_first RAW(32767);
    scan_second RAW(32767);
    len CONSTANT PLS_INTEGER := 32767;
    BEGIN
    infile := UTL_FILE.FOPEN('USER_PATH','codd.bcnf', 'r'); UTL_FILE.FSEEK(infile, absolute_offset, -5);
    UTL_FILE.GET_RAW(infile, scan_first, 1);
    UTL_FILE.FSEEK(infile, 5);
    UTL_FILE.GET_RAW(infile, scan_second, 1); if scan_first != scan_second then
    DBMS_OUTPUT.PUT_LINE('ralative_offset ignored!');
    end if; UTL_FILE.FCLOSE(infile);
    END;
    /






29.2.9. GET_LINE




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

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

  • 프로토타입
    PROCEDURE GET_LINE (
    file IN FILE_TYPE,
    buffer OUT VARCHAR2,
    len IN PLS_INTEGER DEFAULT NULL);
  • 파라미터

    파라미터 설명
    file 파일 핸들러이다.
    buffer 읽어 온 데이터이다.
    len 파일로부터 읽어 올 byte의 크기이다.(기본값: NULL, NULL인 경우 max_linesize 값을 갖는다.)


  • 예외상황

    • INVALID_FILEHANDLE
    • INVALID_OPERATION
  • 예제
    CREATE OR REPLACE DIRECTORY USER_PATH AS '/home/user/path';DECLARE 
    infile UTL_FILE.FILE_TYPE;
    length CONSTANT PLS_INTEGER := 1024;
    read_buffer VARCHAR2(1024) := NULL;
    BEGIN
    infile := UTL_FILE.FOPEN('USER_PATH','hosts', 'r');
    loop
    UTL_FILE.GET_LINE(infile, read_buffer, length);
    DBMS_OUTPUT.PUT_LINE(read_buffer);
    if read_buffer is NULL then
    DBMS_OUTPUT.PUT_LINE(read_buffer);
    else
    exit;
    end if;
    end loop; UTL_FILE.FCLOSE(infile);
    END;
    /






29.2.10. GET_RAW




파일로부터 RAW 타입의 문자열을 읽어 오는 프로시저이다. EOL 문자를 무시하며, 읽은 byte의 크기를 반환한다.

GET_RAW 프로시저의 세부indexterm">

  • 프로토타입
    PROCEDURE GET_RAW
    (
    fid IN UTL_FILE.FILE_TYPE,
    r OUT NOCOPY RAW,
    len IN PLS_INTEGER DEFAULT NULL
    );
  • 파라미터

    파라미터 설명
    fid 파일 식별자이다.
    buffer 읽은 데이터이다.
    len 파일로부터 읽어 올 byte의 크기이다.(기본값: NULL, NULL인 경우 max_linesize 값을 갖는다.)
  • 예제
    CREATE OR REPLACE DIRECTORY USER_PATH AS '/home/user/path';DECLARE 
    infile UTL_FILE.FILE_TYPE;
    length CONSTANT PLS_INTEGER := 32;
    read_buffer RAW(32767);
    BEGIN
    infile := UTL_FILE.FOPEN('USER_PATH','hosts', 'r');
    UTL_FILE.GET_RAW(infile, read_buffer, length);
    UTL_FILE.FCLOSE(infile);
    END;
    /





29.2.11. NEW_LINE




파일에 하나 이상의 EOL 문자를 넣는 프로시저이다. EOL 문자는 플랫폼에 따라 다르다.

NEW_LINE 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    PROCEDURE NEW_LINE
    (
    file IN FILE_TYPE,
    lines IN NATURAL DEFAULT 1
    );
  • 파라미터

    파라미터 설명
    file 파일 핸들러이다.
    lines 파일에 넣을 EOL 문자의 개수이다.








29.2.12. PUT




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

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

  • 프로토타입
    PROCEDURE PUT
    (
    file IN FILE_TYPE,
    buffer IN VARCHAR2
    );
  • 파라미터


  • 예외 상황

    • INVALID_FILEHANDLE
    • INVALID_OPERATION
    • WRITE_ERROR
  • 예제
    CREATE OR REPLACE DIRECTORY USER_PATH AS '/home/user/path';
    DECLARE
    outfile UTL_FILE.FILE_TYPE;
    buf VARCHAR(1024) := NULL;
    BEGIN
    outfile := UTL_FILE.FOPEN('USER_PATH', 'MYFILE.DAT', 'w'); for i in 1..10 loop
    buf := buf || '0123456789';
    end loop; UTL_FILE.PUT( outfile, buf );
    UTL_FILE.FCLOSE(outfile);
    END;
    /






29.2.13. PUTF




형식화된 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 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    PROCUDURE PUTF 
    (
    file IN FILE_TYPE,
    format IN VARCHAR2,
    arg1 IN VARCHAR2 DEFAULT NULL,
    arg2 IN VARCHAR2 DEFAULT NULL,
    arg3 IN VARCHAR2 DEFAULT NULL,
    arg4 IN VARCHAR2 DEFAULT NULL,
    arg5 IN VARCHAR2 DEFAULT NULL
    );
  • 파라미터

    파라미터 설명
    file 파일 핸들러이다.
    format %s와 이스케이프 문자(\n)를 포함하는 형식화된 문자열이다.
    arg1-5 %s에 대체되는 선택할 수 있는 문자열이다. (기본값: NULL)


  • 예외 상황

    • INVALID_FILEHANDLE
    • INVALID_OPERATION
    • WRITE_ERROR
  • 예제
    CREATE OR REPLACE DIRECTORY USER_PATH AS '/home/user/path';DECLARE
    fname VARCHAR2(2048);
    path VARCHAR2(2048);
    outfile UTL_FILE.FILE_TYPE;
    BEGIN
    fname := 'MYFILE.DAT';
    path := 'USER_PATH';
    outfile := UTL_FILE.FOPEN(path, fnamet /home/posung/path/MYFILE.DAT!cat
    /home/posung/path/MYFILE.DAT, 'w');
    UTL_FILE.PUTF( outfile, '%s %s formated file output example\n', path, fname);
    UTL_FILE.FCLOSE(outfile);
    END;
    /






29.2.14. PUT_RAW




RAW 타입 데이터의 내용을 파일에 쓰는 프로시저이다.

PUT_RAW 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    PROCEDURE PUT_RAW
    (
    fid IN UTL_FILE.FILE_TYPE,
    r IN RAW,
    autoflush IN BOOLEAN DEFAULT FALSE
    );
  • 파라미터

    파라미터 설명
    fid 파일 식별자이다.
    r 파일에 쓸 데이터이다.
    autoflush 쓰기를 한 후 출력 버퍼를 비울지 여부를 결정한다.

    • TRUE: 버퍼를 비운다.
    • FALSE: 기본값으로 버퍼를 비우지 않는다.
  • 예제
    CREATE OR REPLACE DIRECTORY USER_PATH AS '/home/user/path';DECLARE
    outfile UTL_FILE.FILE_TYPE;
    buf RAW(8) := HEXTORAW('6161616100616100');
    BEGIN
    outfile := UTL_FILE.FOPEN('USER_PATH', 'MYFILE.DAT', 'wb'); UTL_FILE.PUT_RAW(outfile, buf); UTL_FILE.FCLOSE(outfile);
    END;
    /





29.2.15. PUT_LINE




라인을 파일에 쓰는 프로시저이다. 이때 라인은 플랫폼에 종속적인 EOL 문자로 끝낸다.

PUT_LINE 프로시저의 세부 내용은 다음과 같다.

  • 프로토타입
    PROCEDURE PUT_LINE
    (
    file IN FILE_TYPE,
    buffer IN VARCHAR2,
    autoflush IN BOOLEAN DEFAULT FALSE
    );
  • 파라미터

    파라미터 설명
    file 파일 핸들러이다.
    buffer 파일에 쓸 라인이다.
    autoflush 쓰기를 한 후 출력 버퍼를 비울지 여부를 결정한다.

    • TRUE: 버퍼를 비운다.
    • FALSE: 기본값으로 버퍼를 비우지 않는다.
  • 예제
    CREATE OR REPLACE DIRECTORY USER_PATH AS '/home/user/path';DECLARE
    outfile UTL_FILE.FILE_TYPE;
    out_buf VARCHAR2(1024);
    BEGIN
    outfile := UTL_FILE.FOPEN('USER_PATH', 'MYFILE.DAT', 'w'); for i in 1..10 loop
    UTL_FILE.PUT_LINE(outfile, i || ' put_line is complete', TRUE);
    end loop; UTL_FILE.FCLOSE(outfile);
    END;
    /






29.3. 함수




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




29.3.1. FGETPOS




파일 내에서 파일 포인터의 상대적인 위치(byte)를 반환하는 함수이다.

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

  • 프로토타입
    FUNCTION FGETPOS
    (
    fid IN FILE_TYPE
    )
    return PLS_INTEGER;
  • 파라미터

    파라미터 설명
    fid 파일 핸들러이다.
  • 예제
    CREATE OR REPLACE DIRECTORY USER_PATH AS '/home/user/path';DECLARE
    file UTL_FILE.FILE_TYPE;
    fpos PLS_INTEGER := 0;
    path VARCHAR2(1024);
    fname VARCHAR2(1024);
    BEGIN
    file := UTL_FILE.FOPEN('USER_PATH', 'MYFILE.DAT', 'r');
    UTL_FILE.FSEEK(file, 10, 1);
    fpos := UTL_FILE.FGETPOS(file);
    DBMS_OUTPUT.PUT_LINE('Offest is ' || TO_CHAR(fpos, 'S9999999999')); UTL_FILE.FCLOSE(file);
    END;
    /





29.3.2. FOPEN




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

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

  • 프로토타입
    FUNCTION FOPEN(
    location IN VARCHAR2,
    filename IN VARCHAR2,
    open_mode IN VARCHAR2,
    max_linesize IN BINARY_INTEGER DEFAULT 1024)
    return FILE_TYPE;
  • 파라미터

    파라미터 설명
    location 파일의 경로를 나타내는 디렉터리명이다.
    filename 파일의 이름이다.
    open_mode 파일 모드이다.파일 모드의 종류는 다음과 같다.

    • r: 읽기 텍스트 모드이다.
    • w: 쓰기 텍스트 모드이다.
    • a: 추가 텍스트 모드이다.
    • rb: 읽기 바이트 모드이다.
    • wb: 쓰기 바이트 모드이다.
    • ab: 추가 바이트 모드로, 추가 모드에서 파일이 존재하지 않으면 쓰기 모드로 파일을 생성한다.
    max_linesize 각 라인에 포함되는 byte의 최댓값으로 newline 문자를 포함한다.최소 1byte에서 최대 32767byte이다. (기본값: 1024byte)


  • 예외 상황

    • INVALID_PATH
    • INVALID_MODE
    • INVALID_OPERATION
    • INVALID_MAXLINESIZE
  • 예제
    CREATE OR REPLACE DIRECTORY USER_PATH AS '/home/user/path';DECLARE
    infile UTL_FILE.FILE_TYPE;
    outfile UTL_FILE.FILE_TYPE;
    appfile UTL_FILE.FILE_TYPE;
    max_lsz CONSTANT BINARY_INTEGER := 4096;
    buffer VARCHAR2(1024);
    data1 VARCHAR2(1024);
    data2 VARCHAR2(1024);
    path VARCHAR2(1024);
    BEGIN
    path := 'USER_PATH'; outfile := UTL_FILE.FOPEN(path, 'output_file.txt', 'w', max_lsz);
    appfile := UTL_FILE.FOPEN(path, 'append_file.txt', 'w', max_lsz); data1 := '0123456789';
    data2 := 'abcdefghij';
    for i in 1..10 loop
    UTL_FILE.PUT_LINE(outfile, data1);
    UTL_FILE.PUT_LINE(outfile, data2);
    end loop; UTL_FILE.FCLOSE(outfile);
    UTL_FILE.FCLOSE(appfile); infile := UTL_FILE.FOPEN(path, 'output_file.txt', 'r', max_lsz);
    UTL_FILE.GET_LINE(infile, buffer);
    DBMS_OUTPUT.PUT_LINE(buffer);
    UTL_FILE.FCLOSE(infile);
    appfile := UTL_FILE.FOPEN( path, 'append_file.txt', 'a', max_lsz );
    UTL_FILE.PUT_LINE(appfile, 'appended');
    UTL_FILE.FCLOSE(appfile);
    END;
    /






29.3.3. IS_OPEN




파일 핸들러를 통해 파일이 열려 있는지 검사하는 함수이다. 반환값은 TRUE, FALSE이며, 파일이 열려있는 경우 TRUE를 반환하고, 그렇지 않은 경우 FALSE를 반환한다.

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

  • 프로토타입
    PROCEDURE IS_OPEN(file IN  FILE_TYPE)
    return BOOLEAN;
  • 파라미터

    파라미터 설명
    file 파일 핸들러이다.
  • 예제
    CREATE OR REPLACE DIRECTORY USER_PATH AS '/home/user/path';DECLARE
    openfile UTL_FILE.FILE_TYPE;
    open_flag BOOLEAN;
    status VARCHAR(10);
    fname VARCHAR(10);
    BEGIN
    fname := 'MYFILE.DAT';
    openfile := UTL_FILE.FOPEN('USER_PATH', fname, 'r');
    if UTL_FILE.IS_OPEN(openfile) then
    status := 'opened';
    else
    status := 'not opened';
    end if; DBMS_OUTPUT.PUT_LINE(fname || ' file status : ' || status);
    UTL_FILE.FCLOSE(openfile);
    dbms_output.put_line(fname || 'is closed');
    if utl_file.IS_OPEN(openfile) then
    status := 'opened';
    else
    status := 'not opened';
    end if;
    DBMS_OUTPUT.PUT_LINE(fname || ' file status : ' || status);END;
    /