- ベストアンサー
SELECT・FETCH時の右ブランクを簡単に削除したい
Oracle9i Release 9.2.0 とPro*C を使っています。 VARCHAR2型のカラムをSELECTあるいはFETCH時に ブランクが付いてしまうのですが、これを SELECTあるいはFETCH後にCで右ブランクを削除 (最初のブランクにNULL値をセット)するのではなく、 簡単に削除する方法はないでしょうか? ちなみに、CHAR型ではどうでしょうか? SELECT RTRIM(カラム名) ... としても削除できない のですがどうしてでしょうか? ご存じの方がいらっしゃいましたら教えて下さい。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
#2 のmuyoshid です。 > 確かに外部データ型にSTRING型というのが > ありました。早速プログラムしてプリコンパイルして > みたのですがなぜかSTRINGが認識されません。 同値化してはいかがでしょう? > それどころかVARCHAR2でもです。 MODE=ORACLE でプリコンパイルしてみて下さい。 ANSI でプリコンパイルする必要性があるのですか?
その他の回答 (3)
- raphel_7
- ベストアンサー率34% (86/252)
SELECT RTRIM(カラム名,' ') でだめでしょうか? だめだったら SELECT RTRIM(NVL(カラム名,' '),' ') を試してみてください。
お礼
ご回答ありがとうございます。 お礼が遅くなりましてすみません。 一度試してみます。
- muyoshid
- ベストアンサー率72% (230/318)
こんにちわ。 > 簡単に削除する方法はないでしょうか? ホスト変数を宣言する時に、VARCHAR2 型ではなく、STRING 型を使用したらどうでしょう? STRING 型はNULL 文字で終了する筈です。
お礼
ご回答ありがとうございます。 Pro*CのPDFのマニュアルで調べました。 確かに外部データ型にSTRING型というのが ありました。早速プログラムしてプリコンパイルして みたのですがなぜかSTRINGが認識されません。 それどころかVARCHAR2でもです。もちろん、 EXEC SQL BEGIN DECLARE SECTION; EXEC SQL END DECLARE SECTION; 内で宣言しています。 ちなみに、MODE=ANSIでプリコンパイルしています。
- taka451213
- ベストアンサー率47% (436/922)
こんにちは。 それね・・・、仕方がないんです・・・。 Oracle側が、どうしてもNULL文字(文字列の終端)情報が必要なので、C側ではスペースが入ってしまうんです・・・。 これはTRIMでは消えません。 C側で取得後に削除するしかありません・・・。 (^^ゞ
お礼
ご回答ありがとうございます。 やはり、TRIMを使っても消せないのですね。
お礼
ご回答ありがとうございます。 > 同値化してはいかがでしょう? Pro*COBOL ですが、 http://www.t3.rim.or.jp/~buchi/procobol/sld033.htm に例がありました。 この通りやってみます。 > MODE=ORACLE でプリコンパイルしてみて下さい。 > ANSI でプリコンパイルする必要性があるのですか? 当プロジェクトでは MODE=ANSI でプリコンパイル することになっているんです。