• 締切済み

Fetchについて悩んでいます

素人な質問だとは思いますが困っています。 よろしくお願いします。 処理としてはサーバー側(Java)で帳票のためのデータをオラクルから取得するのですが、 件数が膨大な為、PL/SQLのFETCHで1件ずつ取得しサーバー側で中止要求命令が出ればFETCHを途中で終了し、それまで取得したデータをクライアントへ返却するというものです。 この実現に悩んでいます。 サーバー側でストアドをコールして1件取得し、その後再びストアドをコールし2件目を取得するということは可能なのでしょうか? Fetchにこだわっているわけではありません。 何か他に方法がありましたらご教授ください。 足りない表現などは補足させていただきますので、ぜひよろしくお願いします。

  • Oracle
  • 回答数2
  • ありがとう数3

みんなの回答

回答No.2

PL/SQLで、中止要求が受け取れるなら、同じことをjava側で直に実装すれば、 ややこしい話にならないような気がします。 (PL/SQLを挟むから悩ましいんですよね?) もっとも、中止要求という部分を・・ サーバ側で、”強制セッション切断”に変えて、クライアント側で、 セッション切れたら、”中止要求”と扱うでもいけそうな気がします。

  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.1

 java側のプログラムで、条件を細分化した方が簡単な処理ですみそうな気がします。  たとえば、検索するデータにシリアルコードがついているなら、所用の条件に、code between 1 and 100 といった条件をandで付け加えて、次は、code between 101 and 200・・・以下全部のデータが網羅できるまでループさせればよいでしょう。条件を細分化できれば、日付だろうが何だろうが同じパターンでできると思います。indexがついたフィールドで細分化できれば言うことなしです。  もし、ループの途中で、中止することに決めれば、ループをブレークしてしまえばよいだけですから、実装もそんなに複雑にならないと思います。  要件によっては、適しないかもしれませんので、自信なしということで。

関連するQ&A

  • ストアドプロシージャで別DBに接続

    Oracleのマテリアライズドビューのデータを SQL Server 2008のDBに毎晩取り込む処理を作る必要があり、方法を検討中です。 SQL Serverが稼働しているWindows Server 2003のマシンから、 毎晩タスクで起動させて実行することを考えています。 SQL Serverのストアドプロシージャで実現できないかと考えているのですが、 ストアドプロシージャだけで実現可能でしょうか? Oracleに接続してビューのデータを取得し、それに基づいて、 SQL ServerのDB内のテーブルのデータ追加、更新、削除等を行います。 単純なコピーではなく、データ加工や変換等の処理も行います。 経験がないので、実現可能かというところから教えて下さい。 実現不可能なら、他にどのような選択肢があるか教えていただけると助かります。 よろしくお願いします。

  • PHPのストアドプロシージャ仕様

    初めまして、桜井ともうします。 PHP、Sybaseを用いた開発を行っております。 PHPからSybaseへのデータ取得には sybase_query()関数にストアドプロシージャを 用いて行いたいと思っています。 しかし、PHPの仕様ではストアドプロシージャを 用いた際、最初の1行しか取得できないようです。 今回、どうしてもストアドプロシージャにこだわら 無ければならない理由があるので、 sybase_query()関数を書き換えて(作り替えて) 複数行取得できるようにしようと試みました。 ですが、ct_fetch()が行われている部分で うまくfetchされていないようなのです。 PHP、Sybaseともに初めて扱うものなので、 行き詰まってしまっています。 どなたか、良いアイディアがありましたら、 教えていただけないでしょうか。

    • ベストアンサー
    • PHP
  • VB.NETで作ったプログラムがサーバー上で実行できない

    いつもお世話になっております。 標題の件なのですが、VB.NETで作ったプログラムをサーバーに置いて、 ネットワークごしに実行するとエラーが出てしまいます。 エラーの内容は「system.security.permissions.securitypermission」です。 プログラムの内容は、 (1)XMLファイルを読み取る。 (2)ADOでOracleに接続し、ストアドを実行する。 (3)Oracleからデータを取得し、Excelを出力する。 といった感じです。 エラー内容的にセキュリティの問題だと思うのですが、回避策がございましたら、 ご教授願います。

  • PL/SQLのアドバイスをお願いします。

    主にオラクルのデータをAccess2000からレポートして使っています。 〒コードが、数字データで保存してあります。 例)3430123 今はクライアントPC側のAccessで 例) 343-0123 と計算させて利用しています。 こういった計算はオラクル側でPL/SQLなどを利用したほうが効率はいいでしょうか? それとも毎回計算させるのであれば、クライアント側かサーバ側で計算速度に違いはありませんでしょうか? ※実際にはオラクルの〒コードのフィールドが数値になってしまっているので、 コードが5~7桁とデータがまちまちになってしまっています。 例)北海道 0013304 → 13304 (とオラクルで保存) データを利用するとき、5桁と判断して001-3304 と計算させています。 00で始まる番号、0で始まる番号、0以外で始まる番号の3種類データがあります。 まだ、PL/SQLを利用したことがないのですがこれから活用しようと考えています。

  • 【PL/SQL】LOOPした動的SQLにてFETCHができない

    OracleのPL/SQLで FOR .. LOOP内にて動的SQLを使い SELECTしてきた値を順次FETCHして配列に格納していきたいのですが、 LOOPの1件目のみFETCHがされて2件目以降は全てNULLになってしまいます。SQL文は間違っていません。DBMS_SQL.LAST_ROW_COUNTで1件以上の検索結果があることも確認済みです。 なぜでしょう?教えて下さい! EXECUTE IMMEDIATEをLOOP内で使うことに問題あり? 簡略化した例です。p_noにはすでに文字列格納済みと見てください。 txtsql VARCHAR2(1000); -- 動的SQL mkin INTEGER; fornum1 INTEGER; max_count INTEGER; -- ループされる最大件数 TYPE type_mkin IS TABLE OF NUMBER(10) INDEX BY BINARY_INTEGER; TYPE type_pno IS TABLE OF CHAR(10) INDEX BY BINARY_INTEGER; mkin type_mkin; p_no type_pno; BEGIN FOR fornum1 IN 1 .. max_count LOOP txtsql := 'SELECT SUM(TPSV_NO) ' || ' FROM ACTV || ' WHERE PRI_NO= ' || p_no(fornum1); EXECUTE IMMEDIATE txtsql INTO mkin(fornum1); DBMS_OUTPUT.PUT_LINE(mkin(fornum1)); END LOOP; END;

  • Accessのプログラムが動かなくなりました。

    Oracleからデータを取得し、Accessで帳票を作成するプログラムを作成したのですが Oracleのデータベースをもう1つ増やしたところ(バックアップをとりました) AccessのプログラムがOracleに接続できなくなりました。 どんな原因が考えられますか?よろしくお願いします。

  • ストアドプロシージャに渡された引数の参照方法

    コンパイル済のVB6のプログラムからストアドプロシージャをCALLして いるのですが、実際にどのような値を渡しているのかを調べなければなりません。 VB6の開発環境があれば容易いのですが、現在実行環境しかない為ORACLE側での 調査が必要です。 全てのプロシージャに出力ロジックを追加すれば良いのですが、 数が多すぎて対応に困っております。 ツールや方法論等につきまして、どなたかご存知でしたらご教授頂けると助かります。 環境は以下の通りです。 Client: WindowsXP SP3 VB6で作成したEXE Server: Linux(Red hat linux) ORACLE 11g Standard PL/SQLで作成したStoredProcedure ちなみに、JdeveloperやOracle SQL Developerも調べて見たのですが、 お恥ずかしながら、今一理解が出来ませんでした。

  • DB検索について

    (1)PHPにてSQLをコールしてテーブルから情報の取得を行いたいのです。  $cmnd = "select * from table_a where id=01";を実行し(fetch使用)  仮に15件セレクトされたとすると、抽出された15件は  プログラム内のどこに格納されるのですか? (2)また、そのレコードを順じ処理する場合において、終了条件はどの様に  判定したら良いでしょうか?  DB:oracle

    • 締切済み
    • PHP
  • PL/SQLに関して

    PL/SQLに関しての質問です。 1、プロシージャの内部にファンクションをネストするなどということはできるのでしょうか? (内部ファンクションのような感じで) 2、プロシージャからファンクションを呼び出し、ファンクションの戻り値をレコード型変数にした場合、ファンクションでSELECTしたレコード件数が0件であった場合、例外ブロックのWHEN no_data・・・THEN で、RETURN NULLで戻すことはできるでしょうか? (呼び出し側で、レコード型変数にNULLを代入できますか?) 3、ObjectBrowserからストアドプロシージャを実行するとき、引数ありのストアドプロシージャを実行する方法を教えてください。(または参考WEBサイトを教えてください。) いずれも、試す環境が今ないため、ご回答のほどよろしくお願いします。

  • 初期化パラメータの変更について

    環境:Oracle9i 9.2.0 util_file_dirの初期化パラメータはインスタンス起動中に変更可能でしょうか? PL/SQLでCSV出力したいのですが、出力ができなくて困っています。かといってこれぐらいのことでDBを止めるのはできればしたくないのですが・・。 一応こうなった経緯は現行ではSPOOLでCSVを出力していたのですがデータ件数が200万件あって時間がすごくかかってしまうことが問題でした。その為、PL/SQLでサーバ側でやりましょうということになりました。 どなたかアドバイスお願い致します。