2

私のデータベースで4列としましょう:

Column1, Column2, Column3, Column4 

私のデータ ファイルは CSV ファイルです (カンマ区切り、列の長さは不明):

xxx,yyy,zzz,000  
a,bb,ccccc,ddddddd  
1,2,3,4  

CTL は次のようになります。

LOAD DATA
INTO TABLE "TABLE" 
FIELDS TERMINATED BY ',' TRAILING NULLCOLS 
(
    Column1,
    Column2,
    Column3,
    Column4     
)

Column3 をスキップしたいのですが、どうすればいいですか? 私は知ってFILLERいますが、古いOracleバージョンでは機能しません。

4

3 に答える 3

3

それが可能な場合は、シェル ツールを使用して 3 番目の列をドロップします。それはただの作品です。

awk

awk 'BEGIN { FS="," } { print $1 FS $2 FS $4 }' INFILE > TMPOUTFILE

またはsed

sed 's/^\([^,]\+,[^,]\+,\)[^,]\+,/\1/' INFILE > TMPOUTFILE

(そして、他のいくつかのツールを選択できます(例cut...)

于 2012-02-08T10:29:31.657 に答える
1

これが初期のバージョンでサポートされているかどうかはわかりませんが、後のバージョンではSQL 演算子を使用できます。

LOAD DATA
INTO TABLE "TABLE" 
FIELDS TERMINATED BY ',' TRAILING NULLCOLS 
(
    Column1,
    Column2,
    Column3 "decode(:Column3,null,null,null)",
    Column4
)

...Column3データファイルに値があるかどうかにかかわらず、null に設定されます。

于 2012-02-08T10:07:48.537 に答える
0

1 つの方法は、次のように中間テーブルまたはロード テーブルを使用することです。

LOAD DATA
INTO TABLE "LOADTABLE" 
FIELDS TERMINATED BY ',' TRAILING NULLCOLS 
(
    Column1,
    Column2,
    Column3,
    Column4     
)

その後、メイン テーブルの作成を処理するストアド プロシージャを次のように呼び出します。

CREATE PROCEDURE pop_table
IS
   CURSOR cur_load_table
   IS
              SELECT column1
                   , column2
                   , column4
                FROM loadtable;
BEGIN
   FOR rec IN cur_load_table
   LOOP
      INSERT INTO table( column1
                       , column2
                       , column4 )
      VALUES ( rec.column1
             , rec.column2
             , rec.column4 );
   END LOOP;
END pop_table;
于 2012-02-08T08:38:13.157 に答える