SQL Loaderで1つのCSVファイルから異なるフォーマットのデータを一度に取り込む事は可能でしょうか?
okie1jpMay 9 2013 — edited May 12 2013 お世話になります。
SQL Loaderは、一つのCSVファイル内に異なるデータフォーマットが混在する場合、一つの制御ファイルでデータを取
り込むことは可能でしょうか?
具体的には、シートの上部に表題やそのシートに含まれるデータの定義などがあり、一定行下がったところから本来の
データが連続するExcelブック(管理帳票などでよくあるパターンです)から帳票単位でExportしたCSVファイルからデー
タを読み込む場合です。
やりたい事は、以下のようなフォーマットのCSVファイルの表題行から、号機、装置名称、レシピ名などを取得し、数行
間があいた部分から取り込むデータを取得するというものです。
現状、装置名、号機、レシピ名などは、制御ファイルにCONSTANTで定義していますが、そのため制御ファイルが400
個以上におよび(全部微妙に違います。単調作業なので作成時は300個くらいで意識が飛びかけました)、更に、元シー
トが増えた場合、個別に制御ファイルを追加しなければならないという事態に陥っています。
Webで調べた限りでは出来るかどうかも怪しいのですが、ご経験のある方からアドヴァイスをいただければ。
宜しくお願いいたします。
SQL Loaderの案件なので関係ないとは思いますが、DBは10gR2(10.0.2.0.5)64bit、OSはWindows Server 2003R2 x64
です。
CSVファイルのデータ記述例------------
1行目:表題行|,適用号機:以下略
2行目:表名行|,装置名称□号機□□レシピ名□XXXX管理表,,,,,,,,,,,,,,,,,,, ←□は全角スペースで固定値です。
3行目:不要行|空白
中略
10行目:不要行|空白
11行目:不要行|,,,,,,,,,,,,,,,,,,,,
12行目:不要行|表の列名で、途中改行コード満載(次の行からの列名が連なりますが、割愛)
13行目:不要行|,例,2009/09/04,検査機1,0,2,3,5,2,6,5,2,4,2,OK,,2,,担当者,検印
14行目:データ行|,1,2010/02/16,検査機2,6,0,2,8,4,1,7,-2,1,3,OK,○,3,,担当A,検印B
15行目:データ行|,2,2010/02/25,検査機1,14,0,2,16,6,1,8,-8,1,-2,OK,○,1,,担当A,検印X
中略
109行目:データ行|,96,2012/09/01,検査機1,8,0,5,13,5,0,17,-3,0,9,OK,○,-1,作業コメント,担当C,検印D
110行目:データ行|,97,,,,,,,,,,,,,,,,,,
111行目:データ行|,,,,,,,,,,,,,,,,,,,
…以下空白行
-------------
現在使用している制御ファイルの記述---------
OPTIONS(LOAD=-1, SKIP=13, ERRORS=-1, ROWS=-1)
LOAD DATA
CHARACTERSET JA16SJIS
LENGTH SEMANTICS CHAR
INFILE 'D:\csv\装置名-号機_レシピ名.csv' "STR '\n'"
INTO TABLE LITHO_PT_TEST
APPEND
WHEN INSPECTION_TIME != ''
FIELDS TERMINATED BY ',' TRAILING NULLCOLS
(
PROCESS_EQUIP_ID CONSTANT [装置名+号機名], ←表題行から割り当てたい
PROCESS_RECIPE_ID CONSTANT [レシピ名], ←表題行から割り当てたい
"DUMMY" FILLER, ←データ先頭が","なのでスキップさせている
ROW_NUMBER DECIMAL EXTERNAL(5),
INSPECTION_TIME DATE 'YYYY/MM/DD',
INSPECT_EQUIP_ID CHAR(32),
…以下、データフォーマットの記述
)