DB 2のsqCファイル名8ビットが重複できない解決策

843 ワード

私たちのプロジェクトではIBMのDB 2データベースを使用しています.システム開発言語はC++で、操作データベースは直接C++でESQL(埋め込みSQL)文を書きます.使用中に、ファイル名が8ビット同じであれば、一部のファイルのコードが失効することが分かった.
理由:-----------------------db 2はデフォルトで*を使用する.sqCの名前生成*.bnd,また*.bndのファイル名部分はデータベースにバインドされ、同名のpackageを作成します.db 2のpackageの名前は8バイトの長さに制限されており、上位8ビットのファイル名が同じC++コードは、いずれも後ろの方が前を上書きします.
原因を知れば仕事がうまくいく.
解決:----------------元のファイル名のmd 5要約の上位Nビットを取り、bndファイルの名前につづり、このファイルをターゲットデータベースにバインドすると、packageは前後に上書きされません.
makefileでの実際の作り方:------------------------
%.C : %.sqC
  db2 connect to $(dbName) user $(dbUser) using $(dbPassword);\
  db2 prep $*.sqC bindfile;\
  cp $*.bnd ${shell echo $* |md5sum -|cut -c1-8}_$*.bnd;\
  db2 bind ${shell echo $* |md5sum -|cut -c1-8}_$*.bnd;\
  db2 connect reset; \
  db2 terminate;