2017-05-25 24 views
1

私はPro-CでCLOBを使用しようとしていますが、バッファデータ型の試しに関係なく、互換性がないとプリプロセッサから通知されます。CLOBと互換性のあるPro-Cバッファタイプ

メッセージが

PCC-S-02428, Buffer type is incompatible with LOB type, 

であり、それは読み込みライン上だ:

EXEC SQL LOB READ :amount FROM :clob into :buffer; 

このコードではなくCLOBで動作するようにBLOBで動作するコードを変更する私の試みです。私はOCIBlobLocatorからOCIClobLocatorへのロケータの宣言を変更して、バッファを宣言するために何を必要としているのかを知ろうとしました。(unsigned char buffer [BUFFSIZ]はBLOBのために働いていました。

それが今座っているとして、次のように

CLOBが宣言されています

OCIClobLocator *clob; 

とバッファがある:

#define BUFFSIZ 1000000 
unsigned char buffer[ BUFFSIZ ]; 

私は、char、int型、ダブル、長いを試してみました。 (例えば、short *バッファ)、サイズ配列宣言、ストレート宣言(例えば、uvarcharバッファ)、および符号付きおよび符号なしの両方の、ulong_varchar、short、utext、uvarchar、varcharを含む。バッファ宣言自体が正当なすべての場合、READ INTOステートメントはこのメッセージでコンパイルに失敗します。

実際にメッセージのテキストをgoogleに入力すると、実際に互換性のあるタイプを一覧表示するのに役立つのではなく、単にメッセージを再作成するOracleページが表示されます。 Oracleのチュートリアルでは、すべてBLOBに焦点を当てていますが、CLOBの例はありません。

私が答えに見つけた最も近いことは、スタックオーバーフロー(賞賛!)です。この質問:Selecting CLOB in Oracle using C and embedded SQL

は、同じ問題を抱えている誰かからのものです。彼はPRO-Cのコマンドライン呼び出しからCHAR_SET = STRINGパラメータを削除して解決したと主張しています。問題は、ここのPro-Cはそのようなオプションが存在することを認識していないので、私はそれを使用できないので削除できません。 (私は、このフォーラムを悪用していたことに気付かず、この問題を指摘しようとしていましたが、削除されました...私のお詫びを誰にも謝罪してください)

私のバージョンのPro * C/C++私が実行しているオプションは

PARSE=NONE CODE=CPP CPP_SUFFIX=cpp MODE=ORACLE LINES=YES THREADS=YES 

ある11.2.0.1.0

であり、私が述べたように、以前、OCIBlobLocatorを宣言すると、コンパイルんclob_somethingにblob_somethingから様々な変数の名前を変更する以外はまったく同じこと(と機能。

私は不幸ですatelyはコードを投稿することができません。なぜなら、それは航空システム上にあり、ファイル転送の許可は、私よりもはるかに高いパワーから書かれているからです。問題が何であったかが分かった

答えて

0

私は

のEXEC SQL VARバッファがRAW(BUFFSIZ)IS行っていました。

これは、バッファがblobとのインタフェース用であり、clob用ではない場合に問題ありません。どうやら、あなたがバッファを宣言するのは重要ではありませんが、この呼び出しではRAWにすることは望ましくありません。

BLOBを扱う1つのメソッドで "buffer"を宣言しても、それはIS RAW呼び出しを含む後続のメソッドのPro-Cスコープにあるため、後続のメソッドIでは別の名前を使用する必要がありましたCLOBを扱うために書いています。