1

SQL*Loaderを使用してフラットファイルをOracleデータベースにロードする必要があります。
フラットファイルには、有効なデータとして改行文字を含むフィールドが含まれています。
ファイルは改行文字で行区切りされていません。

これを行うには、次の制御ファイルをどのように変更しますか?

LOAD DATA
 INFILE 'mydata.dat'
 INTO TABLE emp
 ( field1    POSITION(1:4)   INTEGER EXTERNAL,
   field2    POSITION(6:15)  CHAR,
   big_field POSITION(17:7000) CHAR
 )

注:受信ファイルの形式を制御することはできません。

Note: ... indicates that the data continues to the end of the field  

example:  
1234567890abcdefghijklmnopqrstuvwxyz  
1234567890abcdefghijklmnopqrstuvwxyz  
1234567890abcdefghijklmnopqrstuvwxyz  
1234567890abcdefghijklmnopqrstuvwxyz  
1234567890abcdefghijklmnopqrstuvwxyz  
1234567890abcdefghijklmnopqrstuvwxyz  
1234567890abcdefghijklmnopqrstuvwxyz  
1234567890abcdefghijklmnopqrstuvwxyz  
1234567890abcdefghijklmnopqrstuvwxyz  
1234567890abcdefghijklmnopqrstuvwxyz  
...  

result:  
field1: 1234  
field2: 67890abcde
big_field: ghijklmnopqrstuvwxyz  
1234567890abcdefghijklmnopqrstuvwxyz  
1234567890abcdefghijklmnopqrstuvwxyz  
1234567890abcdefghijklmnopqrstuvwxyz  
1234567890abcdefghijklmnopqrstuvwxyz  
1234567890abcdefghijklmnopqrstuvwxyz  
1234567890abcdefghijklmnopqrstuvwxyz  
1234567890abcdefghijklmnopqrstuvwxyz  
1234567890abcdefghijklmnopqrstuvwxyz  
1234567890abcdefghijklmnopqrstuvwxyz  
...
4

3 に答える 3

1

フィールドの位置を指定できます。

load data
append
into table TABLE_NAME
(
FIELD1 POSITION(51:55),
FIELD2 POSITION(60:67),
FIELD3 EXPRESSION "CONSTANT_VALUE",
FIELD4 SEQUENCE,
FIELD5 EXPRESSION "current_timestamp(3)",
)

上記の例FIELD1では、char 51から55(含まれている)、FIELD260から67になります。

FIELD3は必要な値に固定されFIELD4、内部シーケンスを生成しFIELD5、現在のタイムスタンプを取得します。

于 2020-12-23T17:14:48.750 に答える
0

ここでの問題は、各行がフィールドではなくフラットファイルのレコードとして解釈されることです。カンマ、タブ、パイプなどの区切り文字を使用してファイルを再フォーマットする必要があると思います'|' '\ n'を使用して、ローダーがそれを単一のレコードとして解釈するようにします。改行'\n'が発生すると、私が推測する新しいレコードとして扱われます。以下のリンクを参照してください-

http://docs.oracle.com/cd/B28359_01/server.111/b28319/ldr_concepts.htm#sthref718

着信ファイルの形式を設定することはできませんが、そのファイルを読み取って、SQLローダー用に適切な形式のmydata.datを作成することはできます。重要なのは、ローダーに「レコードターミネータは何ですか?」を理解させることです。そうでない場合、ファイルは1つの巨大なレコードのようになります。

于 2012-02-06T21:45:54.273 に答える
0

自分で試したことはありませんが、どうやら、行の区切り文字として何が使用されているかを調べる必要があります。その文字を16進数として渡します。これは#である5Eを拾います

データをファイルにロードtest.dat"strX'5E'"

ただし、どのバージョンに適用できるかはわかりませんが、F1キーを押して行区切り文字を探す価値があるかもしれません。

???? 行の区切り文字はありません。SQL * Loaderのようなものを使用したい場合は、1つだけに何かを書き込む必要があります。

于 2012-02-06T22:05:23.523 に答える