• 締切済み

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

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

  • Oracle
  • 回答数1
  • ありがとう数1

みんなの回答

  • 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

  • PDOStatement::fetchについて

    現在phpを学習しており、mysqlにPDOでデータベース接続をしています。 前ページからGETで取得した変数A($varA)があり、 SELECT文で「テーブルA(tableA)のカラムA(columnA)の値が取得した変数Aと一致するもの」という検索条件を指定し、 条件に該当するレコードのカラムB(columnB)の値を取得し、変数B($varB)に代入したいのですが、 $sth = $dbh->prepare("SELECT columnB FROM tableA WHERE columnA = :varA"); $sth ->bindParam(':varA',$varA); $sth ->execute(); まではネットで調べて記述できたのですが、 fetchには沢山の種類があるので、 データ変数B($varB)に該当カラムの値を代入する場合にどれを使ったらよいか分かりませんでした。 1つのカラムの値を取り出すにはどのfetchを利用したら良いのでしょうか? ちなみにcolumnBに入っているのは数字ではなく文字列です。 ご回答、よろしくお願いします。

    • ベストアンサー
    • PHP
  • fetch_array文

    データベースから取得した値をHTMLにて 出力する際に同じ値がある場合、1つのみ 表示する事は可能でしょうか? データベース 1.西武ライオンズ 2.西武ライオンズ 3.巨人 4.巨人 while($row = mysql_fetch_array($result)){ print "<td>".$row["id"]."<td>"; print "<td rowspan=\"2\">".$row["team"]."</td>"; } 値を配列に格納し、array_uniqueで出来るかと思ったのですが 出来ず…。 希望出力 1. 西武ライオンズ 2. 巨人 お分かりになる方がいらっしゃいましたら ご教授お願い致します。

    • 締切済み
    • PHP
  • ResultSetの内部構造(Java)

    JavaでDBから値を抽出してくるプログラムを作っています。 SQLの結果をResultSetのオブジェクト(参照変数名を「results」とする)に格納しているのですが、 Eclipseのデバッグ機能実行中に、resultsに格納されたDBからの値を書き換えてテストしたいです。 が、 resultsの中には非常に多くの情報が格納されているため、 どこに値が格納されているのか見つけ出す事が出来ませんでした。 DBから取得した値は、ResultSetの中のどこに格納されているのでしょうか? 「"results>xxxxx>xxxxxx>xxxxxx"に格納されている」というような形でご教示頂けると嬉しいです! よろしくお願いします。

    • ベストアンサー
    • Java
  • Access/ADOを使って変数にSQL文を入れた場合の変数の内容の確認

    お知恵をかしてください。 Access2000を使用しています。 VBAのADOを使ってデータベースの操作しています。 モジュールにSQL文を入れたい時は変数を文字列で宣言して記述するのですが、 書きたいSQL文に例えば下記のような計算式を入れたい場合 『&』と『"』が 変数の宣言が文字列なのでくっついて消えてしまいますよね? 変数= sql文 と Format(Mid([FieldName],1,4) & "/" & Mid([FieldName],5,2) & "/" & Mid([FieldName],7,2),"yyyy/mm/dd") そこで、デバッグプリントをしてイミディエイトで実際いまの変数の値はどうなってるのかを確認しながら、 『"』と『&』をつけ足したりしたいのですが、 SQL文が間違っているとデバッグプリントのところに行く前に構文エラーで落ちてしまう為、確認できません。 間違いを探したいからデバッグしているのに、どうすれば良いか分かりません。 何か記述した変数内容がどうなっているのか、確認する方法はないでしょうか? うまく説明ができず、分かりづらいかもしれませんが、ご回答いただければ幸いです。

  • CSVファイルを読み込んで計算するには、構造体か?

    はじめまして。C++プログラミングの質問です。 初心者レベルの質問で申し訳ないのですが、お付き合いください。 CSVファイルを読み込んで、書かれている値を使ってある計算を行う、 ということをしたいのですが、処理方法をどうするか悩んでいます。 CSVファイルに書かれる最大行86400行、最大列6000列です。 また、開発環境はLinuxとなります。 私は「CSVファイルの項目を構造体に格納するクラス」と、「構造体の値を使って計算 するクラス」を考えました。 しかし、構造体ですと最大86400行のものを格納するのは、メモリを食うだけで無駄だという 指摘を受けました。 直接ファイルから値をとってきて、計算クラスに処理させるほうが無難と言われましたが、 「CSVファイルの項目を構造体に格納するクラス=データベース」と考えており、 後々拡張する場合に融通が利くのではないでしょうか。 経験が浅いので、断固たる主張ができないのですが・・・ 構造体に入れることばかり考えていたので、開発のボリュームを抑え、かつ、メモリを食わない 方法を全く思いつきません。 有識者の方へアドバイスを受けたいのですが、 ・大量のデータを読み込む場合、構造体等に格納する方が後ほど助かるか、 それとも、直接ファイル読み込みした方がよいか ・構造体格納のほかに相応しいやり方はないか この2点をメインにお答えいただけないでしょうか。 何か良いやりかたがありましたら教えていただきたいです。 よろしくお願い致します。

  • PROCのFETCH結果にごみが。。

    PROCでSQLDAを使ってFETCHした結果、V変数を見るとオラクルテーブルのVERCHAR2の値に「ゴミ」が付加される場合があります。 例)「AL」→「AL8b」※8bが付加されている。 いつも起きているわけではないのですが、原因を調査する方法が あれば教えてください。 OS : RedHat Linux ES4(update3) Oracle:10g

  • 指定したセルにデータの書き出し

    いつもお世話になっております。 VB.net+SQLでデータベース連携しております。 SQLで抽出したデータをエクセルに書き出すプログラムを考えています。 For Each myRow In ds.Tables("Estimate").Rows Code = myRow("Code") xlSheet.Cells(3, 2).Value = Code Next myRow 上記で3行目の2列目にデータを書き出すことは出来たのですが 変数codeには複数のデータを格納していて上記のプログラムだとCells(3, 2).Value と指定しているので、はじめのデータから最後のデータまで同じセルに上書きしてしまっているようです。 これを各データを一行ずつ書き出したいのですが、上手くいきません。 For Each myRow In ds.Tables("Estimate").Rows    For i = 3 To 17 Code = myRow("Code") xlSheet.Cells(i, 2).Value = Code      i+=1    Next i Next myRow のようにセルの行指示を変数にしたのですが、変わりませんでした。 分かりますでしょうか?

  • ソート中に生じる変数の値の変化

    C言語でソートを用いるプログラムを作成しているのですが,ソートを行った前後で,一部の変数の中身が勝手に書き換えられてしまっています. 例えば,int型で宣言されたix,iy,izという変数の中に格納された値は,ソートには何の関連性をもっていないにも関わらず,ソート後には全て同じ無茶苦茶な値に書き直されます.しかも,何故かこれ等の変数をグローバル変数にした途端に改善されました. ●何故この様な現象が生じてしまったのでしょうか? 加えて,少し類似した症状が,ソートの対象とする構造体にも観察されます.構造体のソートに使う変数自体に変化は見られず,ソート自体も正常に機能していることが確認されているのですが,構造体の他の一部の変数(double型)の値の一部分が0と1072693248に書き換えられます. ●この症状は一体何が原因で,どう改善すれば良いでしょうか? 幾分全く原因が分からない為,質問文自体もかなり曖昧になっていますが,宜しくお願いします.

  • カンマ区切り

    SQLを使用しています。 商品コードが1フィールドにカンマ区切りで複数格納されています。 それを変数に格納していきたいのですがどうもうまくいきません。 格納状態→ ,755,333,6,11585,857 のような状態です。 よろしくお願い致します。

  • eclipseのデバッグ中に変数の値(長い文字列)を確認したい

    eclipseによるjavaソースのデバッグ中に変数の値を確認したいとき、 変数を選択→右クリック→監視 をよく使用しています。 しかし先日、StringBufferにセットされたSQLを見ようとしたところ 文字列が長すぎたためか後半を「...」と省略して表示されてしまいました。 どうにかしてソースコードをいじらずに(printlnの埋め込み等)この長い文字列を確認する方法はありませんでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Java