TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-05-15 |
제목 | UTL_FILE PACKAGE를 사용한 FILE의 DATA HANDLING | ||
---|---|---|---|
UTL_FILE PACKAGE를 사용한 FILE의 DATA HANDLING
============================================== Oracle 7.3 부터 PL/SQL을 이용해 일반 화일에 대한 input/output을 수행할 수 있는데, 이것은 UTL_FILE package를 사용함으로써 가능하다. 다음은 이 기능을 이용하기 위해 필요한 사항과 사용 예제이다. 1.환경 : oracle 7.3 이상, PL/SQL 2.3 이상 2.설정 :1) $ORACLE_HOME/dbs/init : : UTL_FILE_DIR=/oracle/utl_file : : 이것은 일반 화일 디렉토리로서 여러 개 지정할 수 있다. 2) db shutdown 후 restartup함. 3) 만약 이 package를 인식하지 못하는 경우에 한하여 필요한 package를 create하기 위해 두 개의 script를 돌린다. % svrmgrl Oracle Server Manager Release 2.3.2.0.0 - Production Copyright (c) Oracle Corporation 1994, 1995. All rights reserved. Oracle7 Server Release 7.3.2.1.0 - Production Release With the distributed, replication, parallel query and Spatial Data options PL/SQL Release 2.3.2.0.0 - Production SVRMGR> connect internal Connected. SVRMGR> @utlfile : SVRMGR> @prvtfile.plb 3. UTL_FILE package의 내용 --------------------------------------------------------------------- Function/Procedure | Description --------------------------------------------------------------------- FOPEN | Input이나 Output을 위해 file을 연다. file이 | 존재하지 않을 경우 file을 생성한다. --------------------------------------------------------------------- IS_OPEN | file handler를 이용해 file이 open되었는지 여부를 | return한다. --------------------------------------------------------------------- FCLOSE | file을 닫는다. --------------------------------------------------------------------- FCLOSE_ALL | 열려 있는 모든 file을 닫는다. --------------------------------------------------------------------- GET_LINE | open된 file로부터 한 line을 읽는다. --------------------------------------------------------------------- PUT | open된 file에 한 line을 write한다. | ( Line terminator를 붙이지 않는다.) --------------------------------------------------------------------- PUT_LINE | open된 file에 한 line을 write한다. | ( Line terminator를 붙인다.) --------------------------------------------------------------------- PUTF | string을 formatting에 의해 write한다. | (printf처럼) --------------------------------------------------------------------- NEW_LINE | open된 file에 line terminator을 write한다. --------------------------------------------------------------------- FFLUSH | open된 모든 file의 내용을 file에 physical하게 | write한다. --------------------------------------------------------------------- 4.사용 예 : 다음의 sample procedure를 만든다. SQL> l CREATE OR REPLACE PROCEDURE pms_utl IS file_handle UTL_FILE.FILE_TYPE; -- file handle of OS flat file cursor c1 is select empno, ename from emp; v_empno emp.empno%type; v_ename emp.ename%type; linenum NUMBER := 0; retrieved_buffer VARCHAR2(100); -- Line retrieved from flat file BEGIN -- Open file to write into and get it's file_handle file_handle := UTL_FILE.FOPEN('/oracle/utl_file','myfile.txt','w'); -- Write a line of text out to the file. UTL_FILE.PUT_LINE(file_handle, 'this is line 1 as a test'); open c1; loop fetch c1 into v_empno,v_ename; exit when c1%notfound; UTL_FILE.PUT_LINE(file_handle, to_char(v_empno)||' '||v_ename); end loop; close c1; -- Close the file. UTL_FILE.FCLOSE(file_handle); -- Open the same file to read from file_handle := UTL_FILE.FOPEN('/oracle/utl_file','myfile.txt','r'); loop linenum := linenum + 1; -- Read a line from the file. UTL_FILE.GET_LINE (file_handle, retrieved_buffer); -- Print fetched line out to the SQL*PLUS prompt. DBMS_OUTPUT.PUT_LINE(retrieved_buffer); end loop; -- CLose the file. UTL_FILE.FCLOSE(file_handle); EXCEPTION WHEN NO_DATA_FOUND THEN --DBMS_OUTPUT.PUT_LINE('no_data_found'); UTL_FILE.FCLOSE(file_handle); null; WHEN UTL_FILE.INVALID_PATH THEN DBMS_OUTPUT.PUT_LINE('UTL_FILE.INVALID_PATH'); UTL_FILE.FCLOSE(file_handle); WHEN UTL_FILE.READ_ERROR THEN DBMS_OUTPUT.PUT_LINE(' UTL_FILE.READ_ERROR'); UTL_FILE.FCLOSE(file_handle); WHEN UTL_FILE.WRITE_ERROR THEN DBMS_OUTPUT.PUT_LINE('UTL_FILE.WRITE_ERROR'); UTL_FILE.FCLOSE(file_handle); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('other stuff'); UTL_FILE.FCLOSE(file_handle); END; / SQL> set serveroutput on; SQL> exec pms_utl this is line 1 as a test 7369 SMITH 7499 ALLEN 7521 WARD 7566 JONES 7654 MARTIN 7698 BLAKE 7782 CLARK 7788 SCOTT 7839 KING 7844 TURNER 7876 ADAMS 7900 JAMES 7902 FORD 7934 MILLER PL/SQL procedure successfully completed. 4. 본 sample에서는 fopen의 예를 보았으나 일반적으로 c programming에서 사용되는 여러가지 함수와 유사한 기능이 제공되며 자세한 용법은 Oracle 7 Server Application Developer's Guide Page 8-32를 참조한다. |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |