/********************************************************************************************
-- Title : [10g] 외부 테이블 생성 및 읽기/디렉토리 생성
-- Reference : 00패션 박0훈, blog.naver.com/noendrun
-- Key word : oracle directory external table 디렉토리 OS file 외부테이블 외부 테이블
********************************************************************************************/

/**********************************************
-- 예제1) 한 행을 하나의 필드로 저장
**********************************************/

-- 디렉토리 생성
CREATE OR REPLACE DIRECTORY disk_usage_dir as '/oracle';

-- 테이블 생성
DROP TABLE JOB_Disk_Usage;

CREATE TABLE JOB_Disk_Usage
(
   cntnt VARCHAR2(4000)
)
ORGANIZATION EXTERNAL
(
    TYPE ORACLE_LOADER
    DEFAULT DIRECTORY disk_usage_dir
    ACCESS PARAMETERS
    (
        RECORDS DELIMITED BY NEWLINE
        FIELDS
        REJECT ROWS WITH ALL NULL FIELDS
    )
    LOCATION ('disk_usage.txt')
)
REJECT LIMIT UNLIMITED;

-- 읽기 확인
SELECT * FROM job_disk_usage;


/**********************************************
-- 예제1) 한 행을 크기별로 구분하여 필드로 저장
**********************************************/
CREATE TABLE test
( AAA VARCHAR2(2)
, BBB VARCHAR2(8)
, CCC VARCHAR2(2)
, DDD VARCHAR2(4)
, EEE VARCHAR2(512)
)
ORGANIZATION EXTERNAL
    TYPE ORACLE_LOADER
    DEFAULT DIRECTORY disk_usage_dir  -- 오라클 디렉토리명
    ACCESS PARAMETERS                      -- 어떻게 참조할 것인지 정의
    (
        RECORD DELIMITED BY NEWLINE   -- 한 라인이 한 레코드를 사용할 것으로 정의
        FIELDS(
                       AAA CHAR(2),     -- 1~2열을 지정
                       BBB CHAR(8),
                       CCC CHAR(2),
                       DDD CHAR(4),
                       EEE POSITION(1:512) CHAR(512)  -- 1:512를 지정
                   )
    )    
    LOCATION(disk_usage_dir:'/disk_usage.txt')
)
REJECT LIMIT UNLIMITED
NOPARALLEL
NOMONITORING;


/**********************************************
-- 예제2) 콤마(,)로 구분된 텍스트 각 필드로 저장
**********************************************/
-- 파일 샘플
$ cat test.txt
0111,"COREA",
0222,"CHINA",

-- 테이블 생성
create table test_ext (
aa number(4),
bb char(5))
ORGANIZATION EXTERNAL              ☜ external table 생성을 의미
(type oracle_loader               ☜ SQL*Loader를 사용하여 데이터를 load함
 default directory test_dir       ☜ 미리 생성한 directory object를 기술
 access parameters (              ☜ access driver의 변수값 지정
  records delimited by newline   ☜ 줄바꿈으로 record를 구분
  badfile 'test_bad.bad'         ☜ loading되지 못한 record를 저장할 file
  logfile 'test_log.log'         ☜ log 기록을 저장하는 file
 fields terminated by ',' optionally enclosed by '"'    ☜컬럼 구분시 컴마(,) 사용
 (aa, bb))
 location('test.txt'))          ☜ 읽어올 외부 파일의 이름
reject limit unlimited;            ☜ bad file에 저장되는 unload되는 record 제한
 

+ Recent posts