- 締切済み
ROWID型の宣言について(Pro*C)
(Oracle9i) Pro*Cにて、ROWIDを使用したSELECT&INSERTをしたいのですが、 ホスト変数をROWID型で宣言しようとするとエラーになります。 [PCC-S-02201, 記号"rowid"が見つかりました。 次のうちの1つが入るとき~] 宣言の仕方は以下の通りです。 EXEC SQL BEGIN DECLARE SECTION; rowid fetch_ROWID; short fetch_ROWID_ind; EXEC SQL END DECLARE SECTION; ROWIDという型はORACLEにあるので、なぜプリコンパイルが通らないのか 分かりません。 どなたかお分かりになる方がいらっしゃいましたらよろしくお願いいします。 ちなみに以下のような使い方をしようとしていますので、参考までに 載せておきます。 EXEC SQL DECLARE C_XXX CURSOR FOR SELECT ・・・,ROWID FROM XXX FOR UPDATE ・・・ EXEC SQL OPEN C_XXX; EXEC SQL WHENEVER NOT FOUND DO break; while(1){ EXEC SQL FETCH C_XXX INTO ・・・, :fetch_ROWID:fetch_ROWID_ind; EXEC SQL UPDATE XXX SET ・・・ WHERE ROWID=:fetch_ROWID:fetch_ROWID_ind; }
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- muyoshid
- ベストアンサー率72% (230/318)
こんにちわ > ROWIDという型はORACLEにあるので、なぜプリコンパイルが > 通らないのか分かりません。 Pro*C/C++ Precompiler プログラマーズガイドに以下のように記載 されています。 引用> 文字ホスト変数を使用すると、ROWID を読取り可能な書式で格納できます。 引用> ROWID を文字ホスト変数にSELECT またはFETCH すると、その2 進値は 引用> 18 バイトの文字列に変換され、次の形式で戻されます。 引用> BBBBBBBB.RRRR.FFFF 引用> BBBBBBBB はデータベース・ファイル内のブロック、RRRR はブロック内の行 引用> (最初の行は0)、FFFF はデータベース・ファイルです。 引用> これらの値は16 進数です。 ですので、Pro*C から使う場合は、VARCHAR2(18) として下さい。 > ちなみに以下のような使い方をしようとしていますので、参考までに > 載せておきます。 このパターンだと、ROWID を使う必要は無いですね。 Where current of C_XXX で済みますょ。 仮にROWID を使うにしても、ROWID がNULL を返す事は無いので、 標識変数は不要です。