So-net無料ブログ作成
検索選択
前の1件 | -

Oracle SQL ローダで、データを複数の列にストアする技(SQL関数を制御ファイルで使用) [SE]

 現在のプロジェクトで、
4月からサービスインしたシステムの仕様変更を担当してます。

で、
今やっているのは
マスタ更新バッチの仕様追加。

他システムから送られてくるマスタデータを当システムのマスタDBに放り込むもので、
機能追加に伴うマスタテーブル列追加の対応です。

で、
マスタデータの一部を複数の列に設定しなければならなくなったのですが、
DBへのロードはSQLローダが使われてまして。
複数の列に同じデータを放り込むみたいな器用なことが
SQLローダでできるのかしら?
と思いながらググってたら。

SQLのデータ操作と同じことが出来るのがわかりました。

【今回のテクニック
固定長データの一部を複数の列に放り込むのですが、次のように制御文を書きます。

   LOAD DATA
    INTO TABLE TBL_FOO
    (
        HOGE_ID     CHAR( 8)    POSITION(  1:  8),
        HOGE_NAME   CHAR(60)    POSITION(  9: 68),
        OTHER_ID    CHAR( 2)    POSITION( 69: 70),
        DEL_FLAG    CHAR(1)     CONSTANT '0',
        FOO_ID      CHAR        RPAD(:HOGE_ID, 8)||RPAD(:OTHER_ID, 2)   --ここがミソ!!
    )


ミソの部分を説明すると、
 HOGE_ID 列と OTHER_ID 列に入る値を
それぞれ8桁と2桁まで空白埋めして
文字列連結して
 FOO_ID 列にセットしなさい、
という構文です。


流石だぜ、と一瞬感心したのですが、
制御ファイルの内容に従い動的SQLを組み立てているのだし、
SQL関数を使えるとか
データ操作とかできるようにするとか
というのは
当然の発想ですよね。

今まで知らずにいた‘凡庸’がアホでした。。。


なお、
上記のような便利なワザを知らず
わざわざ java バッチでデータロードプログラムとか作っていたのは
お客様には内緒です。
(過去の話ですが。。。)


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:仕事
前の1件 | -

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。