($title_img_alt)

こちらからの投稿は、先頭に表示されているコメントへの返信になります。
RE:SQL cursorで次のレコードに切り替わらない IKD さん [ 2月11日(木) 10時10分 ]
使用方法の差異によって簡単に原因を推察することは
できないでしょう。
要はあてずっぽうではなく、ひとつひとつ実験して原因を
突き止める作業が必要です。

・サービスプログラムのプロシージャを使用している
 (自分自身はメインプログラム)
==> SQL CURSOR は親には伝わらなかったという過去の記憶も確かにありますが
    これを原因と仮定するのであれば小さなプログラムを作って
    プロシージャー呼出しのSQL と、そうでないSQLバインドRPG とを
  比較実行して検証する必要があります。
  
 
 ・cursorのSQLの前に、削除のSQLとデータ抽出のSQLを実行している
 (これらはカーソルは使用しておりません。また動作は正常に実行できてい
ます)
===> これも原因となりうる可能性は高いですね。
   初めに示されたSQL ではなく FETCH のつど、このような特殊な操作を
   しているのであれば危ない操作であり、できれば避けたいものです。
 
 ・サブファイルを6つ使用している
===> SQL が正常に処理されFETCH も正しく進行しているのに SFLレコードに書き出す
     RRN が正しくないとご指摘の症状になる可能性が大いにあります。

===> データ・ベースを SORT するのに無理やりSQL を使わずとも LF を一時的にでも
     作成して READ するほうがパフォーマンスも圧倒的に優れており
   処理構造もシンブルで保守も容易です。
     LF を作ってはいけない、という事情があれば別ですが(それでも一時的にQTEMPなどに
     LF を作成するほうが IBM i には適しています)

     IBM i のある(有名な)経理パッケージを見たことがありますが、開発者がDB2/400の
  レコード・レベルのアクセス(READ, READE, CHAIN, ....)を知らないらしいようで
    すべて SQLバインドで開発していました。
  おかげでその経理パッケージはパフォーマンスが悪くてユーザーからクレームが
    多かったようです。
  別のユーザーでもやはりすべてSQLのみで組んでいるところユーザーもあり、
  やはりパフォーマンスの問題を抱えていました。

  IBM i には適した方法がありますので肩の力を抜いてシンプルで自然なやり方が
  スマートです。
  徒に凝った方法は避けるほうが賢明です。
  SQL は、SQL でなければできないケースにおいてのみ SQLを使うようにしたほうが
    いいでしょう。
    IBM i の場合は数十万レコードのデータ・ベースを扱うのも珍しくありません。
    そのようなケースで SQLだと実用にはなりません。
    レコード・レベルの操作をお勧めします。

RE:SQL cursorで次のレコードに切り替わらない AS400 初心者 さん [ 2月12日(金) 10時47分 ]
>IKD様

詳細にご説明頂き、いつも本当に感謝しています。
ありがとうございます。


処理の流れとしましては、

 1.画面表示(ここでユーザーが任意の検索項目、検索値を設定
        検索項目のサブファイルから値を選択する形で検索値を設定)
 2.実行キー
    ↓2-1 検索内容を含んだSQLでWKファイルを作成
    ↓2-2 抽出をRPG(プロシージャ一部使用)でWKからWK2ファイルを作成
    ↓
 3.画面表示(ここで質問内容のSQL CURSORで順番に表示用のサブファイルに
        書こうとしていました。
        またFキー押下で、押下したキーによってソート条件を
        変更して、サブファイルへの書きなおしをしようと思ってい
ました)


最後の3についてはLFを複数作れば済む話なのですが
SQLで出来ればLFを作成せずにソートが出来るようになるので
ケースバイケースで使い分け出来るようになればと思っていました。

ですがコメント頂いた内容を見て、今回のケースではSQLで行うには
逆に複雑になってしまうように感じましたので、LFを作成して
Fキー押下時にそれぞれのLFを読み直してソートするという形で
実装したいと思います。


いつも本当にありがとうございます。

お名前

パスワード

メールアドレス

タイトル

ホームページ

アドレス

項目