문제

Oracle 데이터베이스에서 외부 테이블을 만들어 서버의 플랫 파일에서 데이터를 검색하고 싶습니다. 이 파일의 형식은 사소하지 않습니다. 이 파일의 각 줄은 줄의 접두사에 따라 여러 레이아웃 중 하나 일 수 있습니다 (접두사 자체는 항상 고정 된 길이입니다). 예를 들어, 라인이 시작됩니다 'TYPE1' 라인과 다른 레이아웃이있을 것입니다. 'TYPE2'.

외부 테이블이 SQL에 제공되는 모든 구성을 활용할 수 있다는 것을 읽었습니다.로더의 제어 파일. 그러나 모든 라인이 공통 레이아웃을 공유하는 사소한 플랫 파일 레이아웃을 처리하기 위해 이음새 만 읽었습니다. SQL로더 제어 파일은 WHEN 절:

WHEN (1:5) = 'TYPE1'
(
    field1 POSITION(10:18),
    field2 POSITION(26:35)
)
WHEN (1:5) = 'TYPE2'
(
    field1 POSITION(23:27),
    field2 POSITION(15:19)
)

Oracle의 외부 테이블 정의 구문을 사용하여 이러한 레이아웃을 어떻게 표현할 수 있습니까?

도움이 되었습니까?

해결책

이것은 9.2 문서에서 비롯되지만 조항시 부하가 필요합니다.

http://download.oracle.com/docs/cd/b10500_01/server.920/a96652/ch12.htm

다른 팁

고정 레코드가 있으면 이것을 시도하십시오

create table EXT_TABLE
(
  record_type        char(2),
  customer_id        char(10),
  customer_name      char(60),
  item_id            char(12)
  quantity           char(10)
)
organization external
(
  type ORACLE_LOADER
  default directory DIR_FLUX_DEV
  access parameters
  (
    RECORDS DELIMITED BY NEWLINE
     BADFILE 'ext_table.bad'
     LOGFILE 'ext_table.log'
     SKIP 0
     FIELDS
    (
     TP_REC               position(1:2)   char(2),
     customer_id          position(3:10)  char(10),
     customer_name        position(13:60) char(60),
     item_id              position(3:12)  char(12),
     quantity             position(15:10) char(10)
    )
  )
  location (DIR_FLUX_DEV:'file.txt')
)
reject limit 0;

그런 다음 레코드 유형 선언에 따라 CUSOR C1은 다음과 같은 열에 액세스 할 수 있습니다.

select e.* from ext_table;

begin
  for r in c1 loop
    if r.tp_rec = '02' then
       dbms_output.put_line(r.tp_rec || ' ' || r.customer_id);
    elsif r.tp_rec = '03' then
       dbms_output.put_line(r.tp_rec || ' ' || r.item_id);
    end if;
  end loop;
end;

도움이 되었기를 바랍니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top