[pgsql-jp: 40458] Re: 自作関数nvlの挙動について

Hiroshi Inoue inoue @ tpf.co.jp
2010年 10月 18日 (月) 12:42:43 JST


井上です。

(2010/10/18 10:03), toshihideka4316 @ zenrin.co.jp wrote:
>   お世話になります。片山です。
> 
>> 同所からもう一度9.0.0102に向けて確認テスト中のドライバを
>> テストしてみてください。
>> なお新しいオフィシャル版9.0.0101がリリースされています。
>> 既にパッケージ済でしたので今回の修正は含まれていません。
> 一度9.0.0102に向けて確認テスト中のドライバを使用したところ、
> COALESCE関数を使用しても以前のようにAPが異常終了しなくなりました。
> 
> これは何かODBCドライバの修正を行われたのでしょうか。
> 前回APが異常終了した件につきましてメカニズム等わかっていましたら教えていた
> だけないでしょうか。

元々の項目midoはnumeric(10)ですが、COALESCEやnvl関数の返り値
は単にnumericでありprecision(精度)やscale(小数点以下の桁数)
の明示的な指定がありません。アプリからのSQLDescribeCol等による
precisionやscaleの問い合わせに対してどのように答えるかが問題
となります。PostgreSQLは確か1000桁のnumericを処理出来ますが
1000と答えて喜ぶアプリは多くないだろうということで、今までは
データの桁数をみて大体の値を求めていました。UseDeclareFetch
モードの場合は全データを読み込まず処理するため後から読み込む
データに桁数がより大きいものが存在すると不具合が発生してしま
ったようです。SQLDescibeColの説明を見てみるとColumn Sizeが
わからない場合は0を返すとありましたので0を返すように修正した
のが9.0.0102に向けて確認中のドライバです。
ただscaleについてはこの手(0を返す)は効かない(わからないでは
なくて普通に0と解釈されてしまう)ようでもう少し工夫が必要だと
思われます。
されて



pgsql-jp メーリングリストの案内