LEI で Oracle に 空文字列を送りつける

IBM Lotus Enterprise Integrator という、Domino の上で動くデータ転送ツールがあります。

プログラミングレスで、各種 RDB や Domino の DB などとデータを全転送したり差分だけ転送したりといったことができます。

単にマスター間でデータを連係したいだけ、なんて時は、テーブル名とカラム名を列挙しておくだけですいすい転送してくれるというとても便利ツールがあるんですけど。

DB2 から Oracle へデータを送りつけようとして困った。

双方に同じようなテーブルがあり、すべてのカラムに Not Null 制約が付いているという状態を考えていただきたい。

DB2 側は、Null じゃなくて空文字列が格納できる。それを Oracle に送ろうとしたら、空文字列を Null に変換してくれる。

どうやら Oracle さんは 空文字列を Null として扱ってしまうよう。

それは困る、という向きのために誤魔化すオプションが LEI にある。

IBM - SPR #JDEP6RLRF2 Product - Enterprise Integration

notes.ini に EIOracleMapEmptyToNULL=0 を設定すると良い。

動作を見てみると( 対象のカラムを dump() で見てみると )、Oracle 側の対象カラムの 1バイトめを 0x00 、2バイト目以降を 0x32 (スペース) で埋めているようです。

Select で取り出すと、さも空文字列かのように ( 実際は chr(0) が最初に出てくるのでいきなり文字列の終端って感じなのかな )。