HPL/SQL - UTL_FILE 패키지
HPL/SQL - UTL_FILE 패키지
UTL_FILE 패키지는 HDFS 파일을 읽고 쓰는 기능을 제공하는 패키지예요. HPL/SQL에서 파일 입출력을 직접 다루고 싶을 때 사용합니다.
출처: 문서
본문
기본적인 사용 예는 다음과 같아요.
DECLARE
f UTL_FILE.FILE_TYPE;
BEGIN
f := UTL_FILE.FOPEN('/user/dm', 'hello.txt', 'w');
UTL_FILE.PUT_LINE(f, 'Hello, world!');
UTL_FILE.FCLOSE(f);
END;
이 예제에서는 HDFS의 /user/dm/hello.txt를 만들고, 한 줄을 쓴 뒤 파일을 닫습니다.
UTL_FILE.FILE_TYPE 타입
UTL_FILE 패키지로 파일을 다루려면 먼저 UTL_FILE.FILE_TYPE 변수를 선언해야 해요. UTL_FILE.FOPEN 함수로 이 변수에 값을 할당한 뒤, 나머지 함수들에서 인자로 사용합니다.
DECLARE
f UTL_FILE.FILE_TYPE;
f2 UTL_FILE.FILE_TYPE;
FOPEN 함수
FOPEN 함수는 파일을 여는 함수입니다.
file_handle: = FOPEN(directory, file, mode);
Parameters
| Parameter | Type | Description |
|---|---|---|
| directory | VARCHAR | 디렉토리 이름 |
| file | VARCHAR | 파일 이름 |
| mode | VARCHAR | 열기 모드: 'r', 'w' |
File Open Modes
'r': 읽기 위해 파일을 엽니다.'w': 쓰기 위해 파일을 엽니다. 파일이 없으면 새로 만들고, 이미 존재하면 내용을 덮어씁니다.
Return Value: FOPEN은 파일을 조작하는 모든 다른 함수에 전달해야 하는 UTL_FILE.FILE_TYPE 파일 핸들을 반환해요.
Example
DECLARE
f UTL_FILE.FILE_TYPE;
BEGIN
f := UTL_FILE.FOPEN('/user/dm', 'hello.txt', 'w');
END;
GET_LINE 함수
GET_LINE 함수는 열려 있는 파일에서 텍스트 문자열을 읽는 함수입니다. 새 줄(출력 문자열에는 미포함), 파일 끝, 또는 지정한 최대 길이까지 읽어요.
UTL_FILE.GET_LINE(file_handle, var [, len]);
Parameters
| Parameter | Type | Description |
|---|---|---|
| file_handle | UTL_FILE.FILE_TYPE | 열린 파일 핸들 |
| var | VARCHAR | 줄을 저장할 변수 |
| len | INT | 최대 줄 길이 (선택) |
Return Value: 없음
Example
DECLARE
f UTL_FILE.FILE_TYPE;
s VARCHAR(100);
BEGIN
f := UTL_FILE.FOPEN('/user/dm', 'hello.txt', 'r');
UTL_FILE.GET_LINE(f, s, 100);
END;
PUT_LINE 함수
PUT_LINE 함수는 파일에 텍스트 문자열을 쓰는 함수입니다. 줄 종결자(line terminator)를 함께 추가해요.
UTL_FILE.PUT_LINE(file_handle, text);
Parameters
| Parameter | Type | Description |
|---|---|---|
| file_handle | UTL_FILE.FILE_TYPE | 열린 파일 핸들 |
| text | VARCHAR | 쓸 텍스트 문자열 |
Return Value: 없음
Example
DECLARE
f UTL_FILE.FILE_TYPE;
BEGIN
f := UTL_FILE.FOPEN('/user/dm', 'hello.txt', 'w');
UTL_FILE.PUT_LINE(f, 'Hello, world!');
END;
PUT 함수
PUT 함수는 파일에 텍스트 문자열을 씁니다. PUT_LINE과 달리 줄 종결자를 추가하지 않아요.
UTL_FILE.PUT(file_handle, text);
Parameters
| Parameter | Type | Description |
|---|---|---|
| file_handle | UTL_FILE.FILE_TYPE | 열린 파일 핸들 |
| text | VARCHAR | 쓸 텍스트 문자열 |
Return Value: 없음
Example
DECLARE
f UTL_FILE.FILE_TYPE;
BEGIN
f := UTL_FILE.FOPEN('/user/dm', 'hello.txt', 'w');
UTL_FILE.PUT(f, 'Hello, world!');
END;
FCLOSE 함수
FCLOSE 함수는 파일 핸들로 식별되는 열린 파일을 닫는 함수입니다.
UTL_FILE.FCLOSE(file_handle);
Parameters
| Parameter | Type | Description |
|---|---|---|
| file_handle | UTL_FILE.FILE_TYPE | 열린 파일 핸들 |
Return Value: 없음
Example
DECLARE
f UTL_FILE.FILE_TYPE;
BEGIN
f := UTL_FILE.FOPEN('/user/dm', 'hello.txt', 'w');
UTL_FILE.FCLOSE(f);
END;
더 알아보기 (Learn more)
FOPEN → PUT_LINE/GET_LINE → FCLOSE 순서가 UTL_FILE 사용의 기본 패턴이에요. PUT와 PUT_LINE의 차이(줄 종결자 추가 여부)만 기억하면 파일 쓰기를 자유롭게 제어할 수 있습니다.