トップ回答者
Pack形式のDecimal変換について

質問
-
説明が不明瞭で申し訳ございません。
ご回答いただいた通り、SQLサーバーのカラム属性はdecimalが望ましいですが、
COBOLのPACKED-DECIMALで定義した項目は、ファイル出力すると、
整数1の場合、001C(0x001C)となり、bcpでロードすることができません。
質問を変えれば、bcpユーティリティで、ファイルの0x001CをSQLサーバーのDecimal項目に数値で1と登録できれば解決します。
的外れな質問でお耳汚しかもしれませんが、ご教示のほどお願いいたします。
------------------------------------------
お世話になります。
HOSTからのデータをMF-COBOLを使用して処理しております。
Pack項目は、BinaryとしてSQLサーバーに保存しておりますが、オンラインから参照させた場合、
0x001Cのように表示されてしまいます。
ユーザー公開にはView表を作成し、Binary項目を変換して、0x001C→1、0x001D→-1
として保存したいと考えております。
元テーブルをフラットファイルにして、UseBinaryFormatを使用すれば変換できるのはわかるのですが、
View表で実現する必要があります。また、オンラインからの更新もあるので、
イメージとしては、PackToDecimal、DecimalToBinary(Decimalではなく、Charでもよい)のような関数を作成し、
View作成時には、PackToDecimalで変換してテーブルに登録し、更新時にはトリガーを仕掛けて、
DecimalToBinaryを使用して、元テーブルを更新できないかと考えております。
どこかに、サンプルとなる情報がないか調べておりますが、なかなか発見できずご質問させていただきました。
ご教示のほど、よろしくお願いいたします。
- 編集済み Osatou 2014年3月12日 5:45
回答
-
後で思いつきました
未検証ですが、binaryからdecimalへの一方通行なら
実体はbinaryのまま扱ってView上で変換すれば、逆変換は不要です。
CAST(REPLACE(REPLACE(REPLACE(dbo.fn_varbintohexstr(@pack),'c',''),'d','-'),'0x','') AS decimal)
でいけるかもしれません。
すべての返信
-
後で思いつきました
未検証ですが、binaryからdecimalへの一方通行なら
実体はbinaryのまま扱ってView上で変換すれば、逆変換は不要です。
CAST(REPLACE(REPLACE(REPLACE(dbo.fn_varbintohexstr(@pack),'c',''),'d','-'),'0x','') AS decimal)
でいけるかもしれません。