¿ÜºÎÆÄÀÏ(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¸¦ ÀǹÌÇÕ´Ï´Ù.