2016-07-26 13 views
0

クイックヘルプが必要です。 私は巨大なパイプで区切られたデータを含むファイルを持っています。 データファイルの各行を表の列にロードします。 しかし、データファイルの各行には複数のパイプがあります。 データを読み込む前に以下の制御ファイルのクエリを使用して、パイプを区切り記号として使用して複数の列にロードしていました。SQLローダーを使用してデータをロード

LOAD DATA 
INTO TABLE sc8157.tmp_analysis_01 
APPEND 
FIELDS TERMINATED BY '|' 
TRAILING NULLCOLS 
(
    ABD_ERRORMESSAGE, 
    ISSUE_NO CONSTANT 'FIT-33266_all' 
) 

しかし、今私は1つの列に行全体をロードします。誰でも制御ファイルのクエリを書いて私を助けることができますか? ありがとうございます。

+2

ファイル内の各行を同じテーブルの異なる列にしたいですか?いくつの列があり、ファイルには列ごとに1つの値がありますか、または複数のデータ行がありますか?単純な例は、小さなテーブルとファイル(値が巨大である必要はありません...)を使用すると便利です。 –

+0

多分、タブを区切り文字として使用しようとします(実際のタブはファイルにないと仮定します)。指定した単一の列にマップする必要があります。使用:x'09 'で終わるフィールド – tbone

答えて

0

もっと簡単な方法は、入力ファイルの区切り文字を変更することです。 入力ファイルとCTLファイルに同じ数のパラメータを設定する必要があります。

入力ファイルのセパレータとCTLファイルが異なる場合は、行全体が1つの列に挿入されます。

+0

実際には、コントロールファイルのフィールドと同じ数のフィールドをファイル内に持つ必要はありません。私の例で与えられているように、制御ファイルを変更して、フィールドを '|'で終わらせるようにしました。唯一の変更は4列のデータファイルで負荷を実行したためです。列 "cola"のみがロードされました。それ以外の場合、FILLER、BOUNDFILLERなどの節は機能しません。 –

0

単にsqlldrに伝えると、フィールド区切り文字は改行文字です。この作業例の表では、「test」には4つの列があります。ファイルtest.datには、パイプで区切られた4つの列もあります。 Sqlldrは、キャリッジリターンがフィールドを終了したので、データの1つの列を表示します。制御ファイルは、テーブルの列名と一致する1つのフィールドを指定しただけで、データが挿入された場所になりました。

LOAD DATA 
infile "test.dat" 
TRUNCATE 
INTO TABLE test 
FIELDS TERMINATED BY x'0D' 
(cola char(1000) 
) 

ああ、他SQLLDRが比較的小さいデフォルト値の値(256?)とスローされますを使用して制御ファイルに「文字」の後、テーブルに定義されているあなたは、フィールドのサイズを置く必要があることに注意してください"フィールドが小さすぎる"か、トラックに狂ったように見せてくれるエラーのようなものです。私は驚いているsqlldr自動的に実際の列サイズを取得し、それを使用するシステムテーブルを照会しません。たぶんそこには正当な理由があります。とにかく私の例を編集します。また、VARCHAR2のサイズは4000文字に制限されています。

関連する問題