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)を使用し、T4では使用しないで、 T2とT3に挿入できます。 あなたは私を助けてくれますか? 以上に単一ファイルの列の値を挿入する方法sqlldrを使用してテーブルの2つの列。

私が使用している以下のコントロールファイルを見つけてください。

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

これははっきりしません。 3つの列に同じ値を設定しますか?または何らかの方法でデータを分割しますか? – APC

+0

はい、3つの列に同じ値を設定します。 – 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

こんにちはサンダーズ、お返事ありがとうございます。しかし、それは動作していません。あなたは、T2、T3、T4の列にA2カラム値を.ctlファイルで設定することによってコピーする方法を教えてください。 – Mahesh

+0

サンダーズに感謝します。それは働いているnow.Thankあなたは非常に多くの – Mahesh

+0

TRAILING NULLCOLS ( "T1" INTEGER EXTERNAL NULLIF "T1" = BLANKS、 \t "T2" CHAR NULLIF "T2" = BLANKS、 \t "T3" CHAR NULLIF "T3" = BLANKS ":T2"、 \t "T4" INTEGER外部NULLIF "T4" = BLANKS、 \t "T5" INTEGER EXTERNAL NULLIF "T5" = BLANKS ":T4"こんにちはサンダーズ、 sqlldrコマンドはT3カラムのみを挿入します.copyオプション( ":T2")はうまく動作します。それはT4とT5をスキップしています。あなたはこれを助けてください。 – Mahesh

関連する問題