UTL_FILE
개요
UTL_FILE은 OS 파일 시스템에 파일을 읽거나 쓴다.
FCLOSE
UTL_FILE.FILE_TYPE
파일을 닫는 함수이다.
FCLOSE_ALL
VOID
현재 세션에 열린 모든 파일을 닫는 함수이다.
FCOPY
VOID
파일의 연속되는 부분을 새로 생성된 파일에 복사하는 함수이다.
FFLUSH
VOID
아직 파일에 쓰지 않고 버퍼에 남아 있는 데이터를 파일에 쓰는 함수이다.
FGETATTR
n/a
디스크 파일의 속성을 반환하는 함수이다.
FOPEN
UTL_FILE.FILE_TYPE
파일을 여는 함수이다.
FREMOVE
VOID
파일을 삭제하는 함수이다.
FRENAME
VOID
파일 이름을 변경하는 함수이다.
GET_LINE
n/a
파일 텍스트 내 한 줄을 읽어오는 함수이다.
IS_OPEN
BOOLEAN
파일이 열려있는지 확인하는 함수이다.
NEW_LINE
BOOLEAN
파일 내 줄 띄어쓰기를 삽입하는 함수이다.
PUT
BOOLEAN
파일에 문자열을 넣는 함수이다.
PUT_LINE
BOOLEAN
파일에 한 줄의 문자열을 넣는 함수이다.
PUTF
BOOLEAN
formatted string을 넣는 함수이다.
보안 모델
설치는 super user에 이루어져야 하고 public으로 공개되어 있다.
Tablespace에 대한 접근 권한이 있어야 파일 생성/읽기/쓰기가 가능하다.
구성
본 절에서는 UTL_FILE 패키지에서 제공하는 프로시저와 함수를 알파벳 순으로 설명한다.
FCLOSE
파일을 닫는 함수이다.
프로토타입
FCLOSE(file IN UTL_FILE.FILE_TYPE)
RETURNS UTL_FILE.FILE_TYPE;
파라미터
file
파일 핸들이다.
예제
x := UTL_FILE.CLOSE(22);
FCLOSE_ALL
현재 세션에 열린 모든 파일을 닫는 함수이다.
프로토타입
FCLOSE_ALL()
RETURNS VOID
예제
PERFORM UTL_FILE.FCLOSE_ALL();
FCOPY
파일의 연속되는 부분을 새로 생성된 파일에 복사하는 함수이다.
프로토타입
FCOPY(src_location TEXT, src_filename TEXT, dest_location TEXT, dest_filename TEXT)
RETURNS VOID
FCOPY(src_location TEXT, src_filename TEXT, dest_location TEXT, dest_filename TEXT, start_line INTEGER)
RETURNS VOID
FCOPY(src_location TEXT, src_filename TEXT, dest_location TEXT, dest_filename TEXT, start_line INTEGER, end_line INTEGER)
RETURNS VOID
파라미터
src_location
복사를 진행할 대상 파일이 위치할 경로의 디렉터리명이다.
src_filename
복사를 진행할 대상 파일의 이름이다.
dest_location
복사가 진행된 이후 파일이 위치할 경로의 디렉터리명이다.
dest_filename
복사가 진행된 이후의 파일의 이름이다.
start_line
복사를 진행할 시작 위치이다. 파일의 라인 번호를 사용해 명시한다.(기본값: 1, 파일의 첫 번째 의미이다.)
end_line
복사를 끝낼 종료 위치이다. start_line과 마찬가지로 라인 번호로 명시한다.(기본값: NULL, 파일의 마지막 라인을 의미한다.)
예제
SELECT utl_file.fcopy('test', 'fcopy_test.txt', 'test2', 'fcopy_test2.txt')
FFLUSH
아직 파일에 쓰지 않고 버퍼에 남아 있는 데이터를 파일에 쓰는 함수이다. 데이터는 반드시 EOL 문자로 끝나야 한다.
프로토타입
FFLUSH(file UTL_FILE.FILE_TYPE)
RETURNS VOID
파라미터
file
파일 핸들러이다.
예제
SELECT utl_file.fflush(22);
FGETATTR
디스크 파일의 속성을 반환하는 함수이다.
프로토타입
FGETATTR(location TEXT, filename TEXT, OUT fexists BOOLEAN, OUT file_length BIGINT, OUT blocksize INTEGER)
파라미터
location
파일의 경로를 나타내는 디렉터리명이다.
filename
파일의 이름이다.
fexists
파일의 존재 여부이다.
file_length
파일의 길이(Byte)이다.
blocksize
파일 시스템의 블록 크기(Byte)이다.
예제
SELECT * from utl_file.fgetattr('test', 'fgetattr_test.txt');
FOPEN
파일을 여는 함수이다. 성공하면 파일 핸들러값을 반환한다.
프로토타입
FOPEN(location TEXT, filename TEXT, open_mode TEXT)
RETURNS UTL_FILE.FILE_TYPE
FOPEN(location TEXT, filename TEXT, open_mode TEXT, max_linesize INTEGER)
RETURNS UTL_FILE.FILE_TYPE
FOPEN(location TEXT, filename TEXT, open_mode TEXT, max_linesize INTEGER, encoding NAME)
RETURNS UTL_FILE.FILE_TYPE
파라미터
location
파일의 경로를 나타내는 디렉터리명이다.
filename
파일의 이름이다.
open_mode
파일 모드이다.파일 모드의 종류는 다음과 같다.
r : 읽기 텍스트 모드이다.
w : 쓰기 텍스트 모드이다.
a : 추가 텍스트 모드이다.
max_linesize
각 라인에 포함되는 byte 수의 최댓값으로 newline 문자를 포함한다.최소 1byte에서 최대 32767bytes이다.(기본값: 1024bytes)
예제
X := utl_file.fopen('test/tmp/dir', 'sample.txt', 'r');
FREMOVE
파일을 삭제하는 함수이다. 파일 삭제에 실패한 경우 UTL_FILE_INVALID_PATH 혹은 UTL_FILE_INVALID_OPERATION exception이 발생한다.
프로토타입
FREMOVE(location TEXT, filename TEXT)
RETURNS VOID
파라미터
location
파일의 위치를 나타내는 디렉터리명이다.
filename
파일의 이름이다.
예제
SELECT utl_file.fremove('test', 'fremove_test.txt');
FRENAME
파일의 이름을 변경하는 함수이다. OS 셸에서 사용하는 mv 명령어와 동일하게 동작한다.
프로토타입
frename(location TEXT, filename TEXT, dest_dir TEXT, dest_file TEXT)
RETURNS VOID
frename(location TEXT, filename TEXT, dest_dir TEXT, dest_file TEXT, overwrite BOOLEAN)
RETURNS VOID
파라미터
location
원본 파일의 경로를 나타내는 디렉터리명이다.
filename
원본 파일의 이름이다.
dest_dir
변경된 파일의 경로를 나타내는 디렉터리명이다.
dest_file
변경된 파일의 이름이다.
overwrite
변경된 파일의 이름이 이미 존재할 경우 덮어쓸지를 지정한다.
예제
SELECT utl_file.frename('test', 'frename_test.txt', 'test', 'frename_test2.txt', true);
GET_LINE
EOL 문자 또는 파일이 끝날 때까지의 내용을 읽어 오는 함수이다. FOPEN 함수에서 지정한 max_linesize 이상을 읽어 올 수 없다.
프로토타입
get_line(file UTL_FILE.FILE_TYPE, OUT buffer TEXT)
get_line(file UTL_FILE.FILE_TYPE, OUT buffer TEXT, len TEXT)
파라미터
file
파일 핸들러이다.
buffer
읽어 온 데이터이다.
len
파일로부터 읽어 올 Byte의 크기이다.(기본값: NULL, NULL인 경우 max_linesize 값을 갖는다.)
예제
DO
$$
DECLARE
read_file utl_file.file_type;
line TEXT;
len int := 2;
BEGIN
read_file := utl_file.fopen('test', 'read_test.txt', 'r');
SELECT utl_file.get_line(read_file, len) INTO line;
END;
$$;
IS_OPEN
파일 핸들러를 통해 파일이 열려 있는지 검사하는 함수이다. 파일이 열려있는 경우 TRUE를 반환하고, 그렇지 않은 경우 FALSE를 반환한다.
프로토타입
IS_OPEN(file UTL_FILE.FILE_TYPE)
파라미터
file
파일 핸들러입니다.
예제
DO
$$
DECLARE
read_file utl_file.file_type;
line TEXT;
len int := 2;
BEGIN
read_file := utl_file.fopen('test', 'read_test.txt', 'r');
WHILE utl_file.is_open(read_file)
LOOP
SELECT utl_file.get_line(read_file, len) INTO line;
END LOOP;
END;
$$;
NEW_LINE
파일에 하나 이상의 EOL 문자를 넣는 함수이다.
프로토타입
NEW_LINE(file UTL_FILE.FILE_TYPE)
RETURNS BOOLEAN
NEW_LINE(file UTL_FILE.FILE_TYPE, lines INTEGER)
RETURNS BOOLEAN
파라미터
file
파일 핸들러이다.
lines
파일에 넣을 EOL 문자의 개수이다.
예제
DO
$$
DECLARE
ftest utl_file.file_type;
pgtap_ok text; -- dummy return for pgtap to work inside anon block
BEGIN
ftest := utl_file.fopen('test', 'put_test.txt', 'w');
-- Put a new line into a txt file
PERFORM utl_file.new_line(ftest);
END;
$$;
PUT
파일에 문자열을 넣을 때 사용하는 함수이다
프로토타입
PUT(file UTL_FILE.FILE_TYPE, buffer TEXT)
RETURNS BOOLEAN
파라미터
file
파일 핸들러이다.
buffer
파일에 쓸 내용이다. 파일이 w(쓰기 텍스트)나 a(추가 텍스트) 모드로 열리지 않은 경우 UTL_FILE_INVALID_OPERATION exception이 발생한다.
예제
DO
$$
BEGIN
PERFORM utl_file.put(utl_file.fopen('test', 'put_test.txt', 'w'), 'ABC ');
END;
$$;
PUT_LINE
한 줄의 텍스트를 파일에 쓰는 함수이다. 이때 라인은 플랫폼에 종속적인 EOL 문자로 끝낸다.
프로토타입
PUT_LINE(file UTL_FILE.FILE_TYPE, buffer TEXT)
RETURNS BOOLEAN
PUT_LINE(file UTL_FILE.FILE_TYPE, buffer TEXT, autoflush BOOLEAN)
RETURNS BOOLEAN
파라미터
file
파일 핸들러이다.
buffer
파일에 쓸 라인이다.
autoflush
쓰기를 한 후 출력 버퍼를 비울지 여부를 결정한다.
TRUE : 버퍼를 비운다.
FALSE : 기본값으로 버퍼를 비우지 않는다.
예제
DO
$$
BEGIN
PERFORM utl_file.put_line(utl_file.fopen('test', 'put_test.txt', 'w'), 'ABC ', true);
END;
$$;
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
프로토타입
UTL_FILE.PUTF(file UTL_FILE.FILE_TYPE, format TEXT)
RETURNS BOOLEAN
UTL_FILE.PUTF(file UTL_FILE.FILE_TYPE, format TEXT, arg1 TEXT)
RETURNS BOOLEAN
UTL_FILE.PUTF(file UTL_FILE.FILE_TYPE, format TEXT, arg1 TEXT, arg2 TEXT)
RETURNS BOOLEAN
UTL_FILE.PUTF(file UTL_FILE.FILE_TYPE, format TEXT, arg1 TEXT, arg2 TEXT, arg3 TEXT)
RETURNS BOOLEAN
UTL_FILE.PUTF(file UTL_FILE.FILE_TYPE, format TEXT, arg1 TEXT, arg2 TEXT, arg3 TEXT, arg4 TEXT)
RETURNS BOOLEAN
UTL_FILE.PUTF(file UTL_FILE.FILE_TYPE, format TEXT, arg1 TEXT, arg2 TEXT, arg3 TEXT, arg4 TEXT, arg5 TEXT)
RETURNS BOOLEAN
파라미터
file
파일 핸들러이다.
format
%s와 이스케이프 문자(\n)를 포함하는 형식화된 문자열이다.
arg1-5
%s에 대체되는 선택할 수 있는 문자열이다. (기본값: NULL)
예제
DO
$$
BEGIN
PERFORM utl_file.putf(utl_file.fopen('test', 'put_test.txt', 'w'),
'[1=%s, 2=%s, 3=%s, 4=%s, 5=%s]', '1', '2', '3', '4', '5');
END;
$$;
Last updated