• 締切済み

Pro*CでVARCHAR2項目の検索

こんにちは。たぶんとても基礎的なことと思うのですが。。。 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にすればよいのかもしれませんが、事情で使えないのです。 それ以前にホスト変数の理解が間違っているのではないかと思い、 お聞きするしだいです。

みんなの回答

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.1

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

greeee
質問者

お礼

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

greeee
質問者

補足

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

関連するQ&A