- - PR -
テキストファイルの取込
1
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2007-07-04 16:20
ORACLE 10gのテーブルに、汎用機で作成した固定長のテキストファイルを取り込む処理を作成することになったのですが、以下のようにヘッダー部・データ部・フッター部で構成されていて、複数のヘッダー部・フッター部があり、各レコード区分ごとに項目の区切り位置が異なり、空白行が入る可能性もあるデータを効率的に取り込む方法で悩んでいます。
取込先のテーブルには、ヘッダー部の処理日を追加し、残りはテキストファイルと同じ項目のデータを作成しますが、やはり1行ずつ回して処理するしかないでしょうか?データが多量なので、SQL LOADERを使えれば一番いいのですが、データ構成上難しそうで・・・。 良い取込方法があれば、アドバイスよろしくお願いいたします。 <取込元ファイル> **STA** 20070215 ←処理日 ブランク ブランク ←データがない日は空白行 **END** 0000001 ←レコード件数 **STA** 20070216 ←処理日 999 品名 ・・・ **END** 0000001 ←レコード件数 <取込先テーブル> ヘッダー処理日 品番 品名 ・ ・ ・ |
|
投稿日時: 2007-07-04 17:21
構造が構造なのでプログラムで解析して INSERT していくか、Oracle さんが解釈できるように整形し直したものをインポートするのが現実的だと思います。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
|
投稿日時: 2007-07-04 17:49
こんにちは。
じゃんぬねっと様のアドバイスと被りますが、似たようなことを行っているので 補足します。 実際に行っている手順ですが 1.ファイルをレコードレイアウトが同じもの毎に分離。 この例だと、元ファイル→ヘッダ部、データ部ファイ、フッター部の3ファイル に分離します。 2.1の3ファイルを別々にSQL LOADER等で3つのテーブルにimport。 3.必要に応じて2でimportされたテーブルを結合等の加工。 という手順です。 1.のレコードの分離処理だけ多少のプログラミングが必要ですが、実際にはレコード 区分等の項目があるケースが多いので、さほど難易度は高くないと思われます。 |
|
投稿日時: 2007-07-04 21:51
saki1208です。
Loaderでワークテーブルに全件取り込み、ストアドで処理なんてのが 良いのでは... # Loaderで取り込む時には項目ごとに分割せずに行番号を付加して # 取り込むなどすればよいかと... # レコード区分くらいは項目を分けるのも良いのではないでしょうか。 |
|
投稿日時: 2007-07-05 09:52
じゃんぬねっとさん、BackDoorさん、saki1208さんアドバイスありがとうございます。
3つのテーブルにインポートしてしまうと、データ部がどのヘッダー・フッターとひもづくのかが分からなくなってしまうので、項目ごとには分割せずに、行番号とレコード区分を付加してSQL LOADERでワークテーブル1へ取込後、さらにSUBSTRINGで分割した項目をワークテーブル2へ取り込む手順でやってみようと思います。 |
1
