본문 바로가기

닷컴's_열공/Database

utl_file 참 쉽게 쓰자.. 알고 보면 쉬운거다..

UTL_FILE   헤메었다.. 알고 보면쉽다..

UTL_FILE   쓰려면 일단 오라클내에 읽고,쓰고 할 디렉토리 경로를 미리 집아주고..

권한을 줘야한다..


CREATE DIRECTORY recv_area1 AS 'D:\temp';

CREATE DIRECTORY send_area1 AS 'D:\temp';


SELECT * FROM ALL_DIRECTORIES ;


경로 잡아주고..


GRANT READ ON DIRECTORY recv_area1 TO mdmuser ;

GRANT WRITE ON DIRECTORY send_area1 TO mdmuser ;


권한주고..


CREATE OR REPLACE PROCEDURE CREATE_DIR_WRITE_SAMPLE

AS

  vHandle   UTL_FILE.FILE_TYPE;

  vDirname  VARCHAR2(250);

  vFilename VARCHAR2(250);

  vOutput   VARCHAR2(32767);

BEGIN

  vDirname  := 'SEND_AREA1'; -- (주)디렉토리 오브젝트명을 대문자로 지정한다

  vFilename := 'test.txt';

  vHandle   := UTL_FILE.FOPEN(vDirname ,vFilename,'w', 32767);

  vOutput   := 'CREATE DIRECTORY 경유로의 파일출력';

  UTL_FILE.PUT_LINE(vHandle, vOutput);

  UTL_FILE.FCLOSE(vHandle);

EXCEPTION WHEN OTHERS THEN

  UTL_FILE.FCLOSE_ALL;

  RAISE;

END;


파일쓰기.. (퍼왔음..)

http://blog.naver.com/hirokorea?Redirect=Log&logNo=20024002616



CREATE OR REPLACE PROCEDURE CREATE_DIR_READ_SAMPLE

AS

  vHandle   UTL_FILE.FILE_TYPE;

  vDirname  VARCHAR2(250);

  vFilename VARCHAR2(250);

  vInput    VARCHAR2(32767);

BEGIN

  vDirname  := 'RECV_AREA1';

  vFilename := 'test.txt';

  vHandle   := UTL_FILE.FOPEN(vDirname ,vFilename,'r', 32767);

 

  BEGIN

    LOOP

      UTL_FILE.GET_LINE(vHandle, vInput,32767);

      DBMS_OUTPUT.PUT_LINE(vInput);

    END LOOP;

  EXCEPTION WHEN NO_DATA_FOUND THEN

    DBMS_OUTPUT.PUT_LINE('파일의 마지막');

  END;

 

  UTL_FILE.FCLOSE(vHandle);

EXCEPTION WHEN OTHERS THEN

  UTL_FILE.FCLOSE_ALL; RAISE;

END;


파일 읽고... 쉽다.. 끗..


예제...


V_FILENAME := 'LV_CARD_CD_'||V_YYMMDD||'.sam';

    FHANDLER := UTL_FILE.FOPEN('DIR_SAM', V_FILENAME, 'R');
    IF UTL_FILE.IS_OPEN(FHANDLER) THEN
      LOOP
        BEGIN
        UTL_FILE.GET_LINE(FHANDLER, V_LINE);
        IF V_LINE IS NULL THEN
          EXIT;
        END IF;
        VAL.CARD_CD := TRIM(REGEXP_SUBSTR(V_LINE, '[^|]+', 1, 1));
        VAL.CARD_CD_NM := TRIM(CONVERT(REGEXP_SUBSTR(V_LINE, '[^|]+', 1, 2),'UTF8','KO16MSWIN949'));

        INSERT /*+ APPEND PARALLEL(LV_CARD_CD 16) */  INTO A
        ( CARD_CD,CARD_CD_NM )
        VALUES
        (VAL.CARD_CD,VAL.CARD_CD_NM )
        ;
        V_I := V_I + 1;
       EXCEPTION
          WHEN NO_DATA_FOUND THEN
               EXIT;
        END;
      END LOOP;
    END IF;

    UTL_FILE.FCLOSE(FHANDLER);


http://blog.naver.com/PostView.nhn?blogId=djusti&logNo=70120565338

퍼옴..

'닷컴's_열공 > Database' 카테고리의 다른 글

오라클 encode , decode  (0) 2012.05.23
오라클 정보보기 view  (0) 2012.05.08
Database size / tablespace 확인  (0) 2012.04.30
오라클 JOB  (0) 2012.04.20
PL/SQL 블록 예제  (0) 2012.04.20