Aug 17, 2001 (Fri) 18:31 - DBD::Oracle

PerlでDBD::Oracle使って,VARCHAR2の列をSELECTするとき,
NLSのCHARSET変換によってバイト数が増えた場合で,
かつ変換前のCHARSETでの最大サイズを超えた場合,
エラーがでてしまうという問題が‥‥‥.

DBI-japanに投げたら,やっぱり半分仕様っぽいような返事が・・・

というわけで,自力でソース読んでパッチ当て.
OCIのマニュアル,1300ページ以上あるんですが(涙)

OCIで,変換後のバイト数を取得する方法は結局わからず,
余裕を見てバッファを4倍にすることに.
とりあえず問題なく動作するようにはなりました.

パッチはDBI-japanにも投げたけど,以下のような感じ.

これ,本家に投げていいのかな‥‥‥.
まぁ,しばらく使ってトラブルなかったら投げてみよう.
ヨーロッパ系の言語(aの上に点がついたりするような)でも
同じ問題は起こる可能性があるし.

[root@mana DBD-Oracle-1.08]# cat ../DBD-Oracle-1.08-nlsconv-buff.patch
--- oci8.c Tue Aug 7 09:25:40 2001
+++ ../DBD-Oracle-1.08.patched/oci8.c Fri Aug 17 18:08:56 2001
@@ -816,7 +816,7 @@
/* the simple types */
case 1: /* VARCHAR2 */
case 96: /* CHAR */
- fbh->disize = fbh->dbsize;
+ fbh->disize = fbh->dbsize * 4;
fbh->prec = fbh->disize;
break;
case 23: /* RAW */



2024年04月
31
0
01
0
02
0
03
0
04
0
05
0
06
0
07
0
08
0
09
0
10
0
11
0
12
0
13
0
14
0
15
0
16
0
17
0
18
0
19
0
20
0
21
0
22
0
23
0
24
0
25
0
26
0
27
0
28
0
29
0
30
0
01
0
02
0
03
0
04
0

TmmDiary / Copyright 2001 Ymirlink,Inc. & Mikage Sawatari
このアドレスにはメールを送らないで下さい.
Don't send mail to this address.
hina@mikage.to