¿ÜºÎÆÄÀÏ(txt)¸¦ ÀÐ°í ¾²±â
¢Â Å×À̺íÀÇ µ¥ÀÌÅ͸¦ txtÆÄÀÏ·Î »ý¼ºÇÏ´Â ¿¹Á¦ÀÔ´Ï´Ù.(UTL_FILE package)
Oracle 7.3 ºÎÅÍ UTL_FILE package¸¦ ÀÌ¿ëÇØ¼ OSÆÄÀÏ¿¡ ´ëÇÑ read/write¸¦ ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.
¢Â 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ÇÑ´Ù.
¢Â Oracle 7.3 ºÎÅÍ ¿À¶óŬ 9i R1±îÁö´Â %ORACLE_HOME%\admin\<SID>\init<SID>.ora ÆÄÀÏ¿¡
txtÆÄÀÏÀÌ »ý¼ºµÉ µð·ºÅ丮¸¦ ÁöÁ¤ÇØ¾ß ÇÕ´Ï´Ù.
1) %ORACLE_HOME%\admin\<SID>\init<SID>.oraÆÄÀÏÀ» ¿¾î¼ ¾Æ·¡ÀÇ
ÆÄ¶ó¹ÌÅ͸¦ Ãß°¡ÇÕ´Ï´Ù.
UTL_FILE_DIR=C:\temp
2) db shutdown ÈÄ restartupÇÔ.
3) ¸¸¾à UTL_FILE package¸¦ ÀνÄÇÏÁö ¸øÇÏ´Â °æ¿ì¿¡ ¾Æ·¡ÀÇ script¸¦ ½ÇÇà½ÃŰ¸é µË´Ï´Ù.
-- sysÀ¯Àú·Î Á¢¼Ó
SQLPLUS sys/manager
SQL> @%ORACLE_HOME%\rdbms\admin\utlfile.sql
..
SQL> @%ORACLE_HOME%\rdbms\admin\prvtfile.plb
¢Â Oracle 9i R2 ¿¡¼´Â CREATE DIRECTORY¸í·ÉÀ¸·Î DIRECTORY¸¦ »ý¼ºÇÏ¸é µË´Ï´Ù.
1) SYS ³ª SYSTEM USER ·Î Á¢¼Ó ÇÕ´Ï´Ù.
C:\>SQLPLUS /NOLOG
SQL> conn sys/manager
2) DIRECTORY¸¦ »ý¼º ÇÕ´Ï´Ù.
SQL> CREATE DIRECTORY LOG_DIR AS 'C:\temp';
DIRECTORY CREATED.
3) »ý¼ºµÈ DIRECTORY¿¡ ´ëÇÑ read±ÇÇÑÀ» ºÎ¿©ÇÕ´Ï´Ù. .
SQL> GRANT READ ON DIRECTORY log_dir TO PUBLIC;
¢Â Å×ÀÌºí µ¥ÀÌÅ͸¦ ÆÄÀÏ·Î »ý¼ºÇÏ´Â ¿¹Á¦(Oracle 9i R2¿¡¼ Çß½À´Ï´Ù.)
CREATE OR REPLACE PROCEDURE PL_WriteFile(fname varchar2) IS
v_output UTL_FILE.FILE_TYPE;
v_result VARCHAR2(4000);
CURSOR sql_cur IS
SELECT empno, ename, deptno
FROM emp;
BEGIN
v_output := UTL_FILE.FOPEN('LOG_DIR', fname, 'A');
FOR v_cur IN sql_cur LOOP
v_result := v_cur.empno||' '||v_cur.ename||' '||v_cur.deptno;
UTL_FILE.PUT_LINE(v_output, v_result);
END LOOP;
UTL_FILE.FCLOSE(v_output);
EXCEPTION
WHEN UTL_FILE.INVALID_PATH THEN
DBMS_OUTPUT.PUT_LINE('INVALID PATH');
WHEN UTL_FILE.INVALID_MODE THEN
DBMS_OUTPUT.PUT_LINE('INVALID MODE');
WHEN UTL_FILE.INVALID_OPERATION THEN
DBMS_OUTPUT.PUT_LINE('INVALID OPERATION');
END;
/
ÇÁ·Î½ÃÀú°¡ »ý¼ºµÇ¾ú½À´Ï´Ù.
SQL> exec PL_WriteFile('output.txt');
PL/SQL 󸮰¡ Á¤»óÀûÀ¸·Î ¿Ï·áµÇ¾ú½À´Ï´Ù.
C:\temp µð·ºÅ丮¿¡ ÆÄÀÏÀÌ »ý¼ºµÇ¾ú´ÂÁö È®ÀÎÇØ º¸¼¼¿ä..
¢Â À§¿¡¼ »ý¼ºÇÑ ÆÄÀÏÀ» Àоî¿Í¼ Ãâ·ÂÇÏ´Â ¿¹Á¦(Oracle 9i R2¿¡¼ Çß½À´Ï´Ù.)
CREATE OR REPLACE PROCEDURE PL_ReadFile(fname varchar2) IS
v_input UTL_FILE.FILE_TYPE;
retrieved_buffer VARCHAR2(100); -- Line retrieved from flat file
BEGIN
-- ÆÄÀÏÀ» Read
v_input := UTL_FILE.FOPEN('LOG_DIR',fname,'R');
LOOP
UTL_FILE.GET_LINE (v_input, retrieved_buffer);
DBMS_OUTPUT.PUT_LINE(retrieved_buffer);
END LOOP;
-- CLose the file.
UTL_FILE.FCLOSE(v_input);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('no_data_found');
UTL_FILE.FCLOSE(v_input);
WHEN UTL_FILE.INVALID_PATH THEN
DBMS_OUTPUT.PUT_LINE('UTL_FILE.INVALID_PATH');
UTL_FILE.FCLOSE(v_input);
WHEN UTL_FILE.READ_ERROR THEN
DBMS_OUTPUT.PUT_LINE(' UTL_FILE.READ_ERROR');
UTL_FILE.FCLOSE(v_input);
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('other stuff');
UTL_FILE.FCLOSE(v_input);
END;
/
SQL> SET SERVEROUTPUT ON;
SQL> EXEC PL_ReadFile('output.txt');
7369 SMITH 20
7499 ALLEN 30
7521 WARD 30
7566 JONES 20
7654 MARTIN 30
7698 BLAKE 30
....
PL/SQL 󸮰¡ Á¤»óÀûÀ¸·Î ¿Ï·áµÇ¾ú½À´Ï´Ù.
¢Â Âü°í»çÇ×
- v9.2 ÀÌÀü¿¡´Â utl_file function ¿¡ ´ëÇÑ directory ¸¦ access Çϱâ À§Çؼ´Â
UTL_FILE_DIR parameter ¸¦ init<sid>.ora file ¿¡ ±â¼úÇÏ¿©¾ß¸¸ Çß½À´Ï´Ù.
±×·¯³ª, UTL_FILE_DIR À» access ÇÏ´Â °Í¿¡ ´ëÇØ ´õÀÌ»ó recommand ÇÏÁö ¾ÊÀ¸¸ç,
UTL_FILE_DIR ´ë½Å¿¡ CREATE DIRECTORY ±â´ÉÀ» recommand ÇÕ´Ï´Ù.
DIRECTORY object´Â application °ü¸®ÀÚ¿¡¼ º¸´Ù À¯¿¬Çϰí À¶Å뼺 ÀÖ´Â
Á¦¾î¸¦ Á¦°øÇϸç, dbÀÇ shutdown ¾ø´Â dynamic ÇÑ À¯Áö°ü¸®À» ÇÒ ¼ö ÀÖ°Ô ÇÕ´Ï´Ù.
CREATE DIRECTORY ¿¡ ´ëÇÑ ±ÇÇÑÀº default ·Î SYS ¿Í SYSTEM user ¿¡ ´ëÇØ¼¸¸
ºÎ¿©µÇ¾î ÀÖ½À´Ï´Ù.
- UTL_FILE.FOPEN('LOG_DIR',fname,'R')¿¡¼
'R'Àº read¸¦,'W'´Â write¸¦, 'A'´Â append¸¦ ÀǹÌÇÕ´Ï´Ù.