• 締切済み

FETCHでデータが取れているのに、エラーが。。。

こんにちは。初めて質問させていただきます。 現在仕事で、Pro *Cを使用したプログラムを扱っています。 そこで、質問なのですが、今プログラムの中で、FETCHを行い、データベースから値を持ってきて、SQLDA構造体に格納しているのですが、デバッグでSQLDA構造体のV変数を見ても、ちゃんと格納されているにも関わらず、SQLのエラーコードとして"1403"が返ってきてしまいます。 条件をいろいろと変更してみたのですが、原因がわからず、困っています。 わかりにくい質問かもしれませんが、どうかよろしくお願い致します。 ちなみに、OSは"Linux"を使用しています。

みんなの回答

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

配列へのFETCHならFETCHの結果行数が配列の行数未満の場合には1403になります。 FETCHされる行数 各FETCHが戻すのは、最大でも配列の全行数分までです。次のような場合は、配列の全行数より少ない行が戻されます。 •アクティブ・セットの最後に達したとき。「データが見つかりません」というOracleエラー・コードがSQLCA内でSQLCODEに戻されます。たとえば、要素数100の配列に行をフェッチしたとき20行しか戻されなかった場合にこれが起こります。 •フェッチ対象の行が配列の全行数よりも少ないとき。たとえば、要素数20の配列に70行をフェッチすると、この状態となります。つまり、3回目のフェッチの後には、フェッチ対象の行は10行しか残っていません。 •行の処理中にエラーが検出されたとき。FETCHは失敗し、該当するOracleエラー・コードがSQLCODEに戻されます。 戻された行の累積数は、このガイドではsqlerrd[2]と記載しているSQLCA内のsqlerrdの3番目の要素に保存されます。これはオープン状態のすべてのカーソルに適用されます。次の例では、各カーソルの状態がそれぞれ更新されている様子がわかります。 EXEC SQL OPEN cursor1; EXEC SQL OPEN cursor2; EXEC SQL FETCH cursor1 INTO :array_of_20; /* now running total in sqlerrd[2] is 20 */ EXEC SQL FETCH cursor2 INTO :array_of_30; /* now running total in sqlerrd[2] is 30, not 50 */ EXEC SQL FETCH cursor1 INTO :array_of_20; /* now running total in sqlerrd[2] is 40 (20 + 20) */ EXEC SQL FETCH cursor2 INTO :array_of_30; /* now running total in sqlerrd[2] is 60 (30 + 30) */

h05d8023
質問者

お礼

お礼が遅れて申し訳ありません。 ありがとうございます! 参考にさせていただいた結果、上手く行きそうです! 本当にありがとうございました。

関連するQ&A