dポイントプレゼントキャンペーン実施中!

こんにちは。たぶんとても基礎的なことと思うのですが。。。

Pro*CでSELECTするとき、WHERE句の中でVARCHAR2項目を条件に入れています。
が、どうも検索がうまくできなくて質問しました。

ホスト変数の定義…
 char VVV[5];

検索するところ…
select xxx into :yyy from ZZZ
where ZZZ.varchar2no4BYTE = :VVV ;

のような感じです。ZZZ.varchar2no4BYTEの型はVARCHAR2(4)です。
で、ZZZ.varchar2no4BYTE が"1234"と"12"の2つのレコードを
登録しておいて、VVVに"1234"を入れると、ちゃんと検索できました。

んが、VVVに"12"を入れても検索されません。
そんなのあり?と
VVVに"12 "を入れてもだめ、
VVVをVARCHAR構造体?にして、"12"で長さ2にしてもだめ、
だけどZZZ.varchar2no4BYTEがCHAR(4)だと"12"でOK、
なんなんだとPro*Cのマニュアル見てもNUMBER型の検索例ばかり、
というところで力尽きました。
(あー、CHAR_MAP=STRING って関係あるですかね)

動的SQLにすればよいのかもしれませんが、事情で使えないのです。
それ以前にホスト変数の理解が間違っているのではないかと思い、
お聞きするしだいです。

A 回答 (1件)

記憶モードで申し訳ないんですが、ORACLEのバージョンや


設定によって、ホスト変数に設定する文字列がレコード長
より短い場合の処理で、後にスペースを埋めておかないと
いけない場合と、終端Nullをセットする場合があったはず
です。
現在使っているORACLEのバージョンは何でしょうか?

この回答への補足

早速ご回答ありがとうございます。
ORACLEは10g Release2 です。
確かにいろいろ機能が増えてきているようです。

補足日時:2006/03/27 10:41
    • good
    • 0
この回答へのお礼

自己解決しました。
結局、ホスト変数 VVV を
  VARCHAR VVV[5];
のように宣言し、VVV.arrに"12"、VVV.lenに2を入れることで実現できました(質問の中のVARCHARを使って云々のときは宣言の仕方が間違っていました)。
なお、don_goさんご指摘のとおり、「オラクルがサポートしているOSバージョンとPro*Cの相性が悪いと意味不明な挙動をする」という話もあるようです。
ご回答ありがとうございました。

お礼日時:2006/03/27 18:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!