2017-12-18 9 views
1

파일 (.csv)에 A1, A2, A3 열이 포함되어 있고 T1, T2, T3, T4, T5 열에 테이블이 있습니다.sqlldr을 사용하여 단일 파일 (.csv) 열을 여러 테이블 열로 매핑하는 방법

A2 열에서 T2, T3, T4까지 데이터를 매핑하거나 삽입하려고합니다. 컨트롤 파일 (.ctl)에서는 desc_skip FILLER POSITION (1)을 사용하지만 T2에서는 T3을 사용하지 않고 T2 및 T3에 삽입 할 수 있습니다. 도와 주시겠습니까 이상의 단일 파일 열 값을 삽입하는 방법 sqlldr을 사용하여 테이블의 두 열.

아래에서 내가 사용중인 제어 파일을 찾으십시오.

LOAD DATA 
INTO TABLE EMP 
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' 
TRAILING NULLCOLS 
(
    "T1" INTEGER , 
    "T2" CHAR, 
    desc_skip FILLER POSITION(1), 
    "T3" CHAR, 
    "T4" CHAR, 
    "T5" INTEGER 
) 

감사합니다.

당신은

... 
T2 char, 
T3 expression ":T2", 
T4 expression ":T2", 
... 

P.S. 유사한 것을 사용한다

+0

이것은 분명하지 않습니다. 동일한 값을 세 개의 열로 채우려할까요? 또는 어떤 방식으로 데이터를 분할합니까? – APC

+0

예, 세 개의 열에 동일한 값을 채 웁니다. – Mahesh

답변

0

나는 '작동하지 못하는 것'이 무엇인지 상상할 수 없다. 내 예 :

데이터베이스 :

SQL> create table t$loader (t1 varchar2(10), t2 varchar2(10), t3 varchar2(10), t4 varchar2(10), t5 varchar2(10)); 

Table created 

CSV 파일 :

echo 1,2,3 > csv.csv 
echo 4,5,6 >> csv.csv 
echo 7,8,9 >> csv.csv 

제어 파일 :

load data 
    infile 'csv.csv' 
    into table t$loader 
    fields terminated by ',' 
(
    t1 char, 
    t2 char, 
    t3 expression ":t2", 
    t4 expression ":t2", 
    t5 char 
) 

실행 :

sqlldr userid=user/[email protected] control=csv.ctl 

결과 :

SQL> select * from t$loader; 

T1   T2   T3   T4   T5 
---------- ---------- ---------- ---------- ---------- 
1   2   2   2   3 
4   5   5   5   6 
7   8   8   8   9 

당신이 원하는 것은 아닙니까?

+0

안녕하세요 샌더스, 감사합니다. 하지만 그것은 작동하지 않습니다 .U2 컬럼 값을 .ctl 파일로 구성하여 T2, T3, T4 컬럼으로 복사하는 방법을 알려주십시오. – Mahesh

+0

감사합니다 샌더스. 그것은 작동하고 now.Thank 대단히 – Mahesh

+0

TRAILING NULLCOLS ("T1"INTEGER EXTERNAL NULLIF "T1"= 공백, \t "T2"CHAR NULLIF "T2"= 공백, \t "T3"CHAR NULLIF "T3"= 공백 "T2" \t "T4"INTEGER EXTERNAL NULLIF "T4"= 공백, \t "T5"INTEGER EXTERNAL NULLIF "T5"= 공백 "T4") 안녕 샌더스, 자바 프로그램에서 사용할 때이 문제에 직면하고있다, sqlldr 명령은 최대 T3 열만 삽입합니다 .copy 옵션 (": T2")은 정상적으로 작동합니다. 그것은 T4와 T5를 건너 뛰고 있습니다. 이것 좀 도와 주실 수 있겠습니까? – Mahesh