結果データベースを持つ埋め込みSQL文の中には、Magic xpaでの動作が異なるものがいくつかあります。
埋め込みSQL文は常に、[タスク前]の前に実行されます。このため[タスク前]が実行される時点では、そのSQL文はすでに実行されていることになります。
オンラインタスクとバッチタスクの比較
オンラインタスクの場合は、以下のようになります。
SELECT文の結果を表示する必要があります。
Magic xpaは一時的な結果テーブル/ファイルを作成して全部のレコードをそこに挿入するため、ユーザはそれらのレコードをスクロールできます。このテーブルはタスク終了時に削除されます。
バッチタスクの場合は、以下のようになります。
レコードは全て1度限り読み込まれるため、前に戻る必要はありません。
Magic xpaはSELECT文に従ってカーソルをオープンし、全てのレコードを1つずつ順番にフェッチします。
結果データベースと入力データベースが同じ場合
このオプションを選択すると、結果データベースを入力データベースと同じにすることができます。ほとんどの場合、基礎となるRDBMS では次の文を使用できます。
INSERT INTO table AS SELECT... |
この文は1 回のコマンドで全データをテーブルにコピーしています。この方法はカーソルをオープンするよりも高速です。レコードは全てクライアントから取得され、結果テーブルに挿入されます。
このような場合、SQL ゲートウェイはデータベース内にテーブルを作成し、次の文を送信します。
INSERT INTO temp_table AS direct SELECT statement |
その後、ユーザはこのテーブルをスクロールしてSELECT 文の実行速度を向上させることができます。この方法では一時ファイルから個々のレコードを取り出したりそこへ挿入したりする処理がないため、結果セットが大きい場合には特に有効です。
結果データベースと入力データベースが異なる場合
結果データベースが入力データベースと異なる場合は、一時テーブルが作成され、SELECT 文の結果のレコードが全てこの一時テーブルに格納されます。その後、タスクはこの一時テーブルをメインソースとしてスクロールできます。
推奨事項
結果が大量になる場合は、結果データベースを入力データベースと同じにするオプションを利用するのが最善です。
結果が比較的小さくなる場合は、結果データベースとして、クライアントに常駐するISAM データベースを指定するのが最善です。そうすることで、結果を作成してそれをスクロールする時の作業がクライアント上だけで済むため、ネットワークトラフィックが減少します。
結果が比較的小さくなる場合は、メモリゲートウェイを使用することでパフォーマンスが向上します。
関連トピック: