• ベストアンサー

SELECT・FETCH時の右ブランクを簡単に削除したい

Oracle9i Release 9.2.0 とPro*C を使っています。 VARCHAR2型のカラムをSELECTあるいはFETCH時に ブランクが付いてしまうのですが、これを SELECTあるいはFETCH後にCで右ブランクを削除 (最初のブランクにNULL値をセット)するのではなく、 簡単に削除する方法はないでしょうか? ちなみに、CHAR型ではどうでしょうか? SELECT RTRIM(カラム名) ... としても削除できない のですがどうしてでしょうか? ご存じの方がいらっしゃいましたら教えて下さい。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.4

#2 のmuyoshid です。 > 確かに外部データ型にSTRING型というのが > ありました。早速プログラムしてプリコンパイルして > みたのですがなぜかSTRINGが認識されません。 同値化してはいかがでしょう? > それどころかVARCHAR2でもです。 MODE=ORACLE でプリコンパイルしてみて下さい。 ANSI でプリコンパイルする必要性があるのですか?

katsuboh
質問者

お礼

ご回答ありがとうございます。 > 同値化してはいかがでしょう? Pro*COBOL ですが、 http://www.t3.rim.or.jp/~buchi/procobol/sld033.htm に例がありました。 この通りやってみます。 > MODE=ORACLE でプリコンパイルしてみて下さい。 > ANSI でプリコンパイルする必要性があるのですか? 当プロジェクトでは MODE=ANSI でプリコンパイル することになっているんです。

その他の回答 (3)

  • raphel_7
  • ベストアンサー率34% (86/252)
回答No.3

SELECT RTRIM(カラム名,' ') でだめでしょうか? だめだったら SELECT RTRIM(NVL(カラム名,' '),' ') を試してみてください。

katsuboh
質問者

お礼

ご回答ありがとうございます。 お礼が遅くなりましてすみません。 一度試してみます。

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.2

こんにちわ。 > 簡単に削除する方法はないでしょうか? ホスト変数を宣言する時に、VARCHAR2 型ではなく、STRING 型を使用したらどうでしょう? STRING 型はNULL 文字で終了する筈です。

katsuboh
質問者

お礼

ご回答ありがとうございます。 Pro*CのPDFのマニュアルで調べました。 確かに外部データ型にSTRING型というのが ありました。早速プログラムしてプリコンパイルして みたのですがなぜかSTRINGが認識されません。 それどころかVARCHAR2でもです。もちろん、 EXEC SQL BEGIN DECLARE SECTION; EXEC SQL END DECLARE SECTION; 内で宣言しています。 ちなみに、MODE=ANSIでプリコンパイルしています。

回答No.1

こんにちは。 それね・・・、仕方がないんです・・・。 Oracle側が、どうしてもNULL文字(文字列の終端)情報が必要なので、C側ではスペースが入ってしまうんです・・・。 これはTRIMでは消えません。 C側で取得後に削除するしかありません・・・。 (^^ゞ

katsuboh
質問者

お礼

ご回答ありがとうございます。 やはり、TRIMを使っても消せないのですね。

関連するQ&A