お世話になっております。 A.中村です。

On Tue, 9 Nov 1999 02:31:15 +0900
Yoshida Masato <yoshidam / yoshidam.net> wrote:

>bindrv メソッドでプログラム変数の型を VARCHAR2 にしているせいかもしれません。CHAR 同士の比較では brank-padded comparison が行われて,VARCHAR2 と CHAR では non-brank-padded comparison が行われるようです。文字列リテラルは CHAR 扱いのようなので brank-paddedcomparison  が行われるのでしょう。

パッチかましてみました。
「期待した」とおりに動くようになりました。

ところでこれ、逆にDBデータのほうがVARCHAR2型だった場合
もしかして今回と同様(というか逆)な事態が起きたり
するのかなと、新たな心配が。
VARCHAR2同士の比較がVARCHAR2-CHAR比較と同じく
non-brank-padded comparisonで行われるならば
問題はないんですが。

えーとえーとORACLEのヘルプでは…あ。

>Oracleは、比較される値のどちらか、あるいは両方がデータ型VARCHAR2を持っている場合、必ず非空白埋め比較を使用します。

という記述が見つかりました。
ってことは、比較の片方であるbind変数をCHAR型にしとけば
上記の心配は、しなくてもいいってことですね。


よだん:
二つのTYPEを、単なる独立な二つとしてではなくて
両者に「共通な性質」と「異なる性質」とに
再整理して(横のものを縦にするとでもいうか)考える
ことが出来るという意味で、
classっていう考え方は、似て非なるモノを
混乱なく扱うための手段として非常に有り難いですね。