get previous

EGL get previous 文は、リレーショナル・データベース結果セットから直前の行を読み取るか、指定の EGL 索引付きレコードに関連付けられたファイル内の直前のレコードを読み取ります。

この文をリレーショナル・データベース結果セットに使用できるのは、関連する open 文で scroll オプションを指定した場合のみです。 scroll オプションを使用できるのは、Java™ で出力を生成している場合のみです。


get previous 文の構文図
record name
入出力オブジェクトの名前。索引付きレコード、SQL レコードなどを指定します。
from resultSetID
SQL 処理のみに使用する、同じプログラム内で前に実行された open 文に get previous 文を結合する ID。 詳細については、『resultSetID』を参照してください。
into
リレーショナル・データベース・テーブルから値を受け取る項目がリストされた文節の中で、EGL を開始します。
item
特定の列の値を受け取る項目。 項目名の前にはコロン (:) を付けません

索引付きレコードの例を次に示します。

  record1.hexKey = "FF";
  set record1 position;

  try
    get previous record1;
  onException
    myErrorHandler(8);
    return;
  end
  
  while (record1 not endOfFile)
    processRecord(record1); // データの処理

    try
      get previous record1;
    onException
      myErrorHandler(8);
      return;
    end
  end

get previous 文の詳細は、索引付きレコードを使用しているか、あるいは、SQL 処理に関係しているかによって異なります。

索引付きレコード

get previous 文が索引付きレコードに対して操作を行う場合、効果は現在のファイル位置に基づいたものとなります。 この位置は、以下のどちらかの操作によって設定されます。
  • get 文または別の get previous 文などの正常な入出力 (I/O) 操作
  • set record position という書式の set
索引付きレコードに関する規則は、以下のとおりです。
  • ファイルが開かれていない場合は、get previous 文はファイル内のキー値が最も高いレコードを読み取る。
  • 以降の各 get previous は、現在のファイル位置との関係でキー値が次に低いレコードを読み取る。複写キーの場合の例外については、後で説明します。
  • get previous 文がファイル内のキー値が最も低いレコードを読み取った後、次の get previous 文の結果は EGL エラー値 endOfFile になる。
  • 現在のファイル位置は、以下の操作の影響を受ける。
    • set record position という書式の EGL set 文は、set value に基づいてファイル位置を設定する。 この値は、set 文によって参照される索引付きレコード内のキー値です。 同じ索引付きレコードに対する以降の get previous 文は、キー値が set value と等しいかより小さいファイル・レコードを読み取ります。そのようなレコードが存在しない場合は、get previous 文の結果は endOfFile になります。
      set value が 16 進数 FF で埋められている場合、set record position という形式の set 文の結果は以下のようになります。
      • set 文は、ファイル内の最後のレコードの後ろにファイル位置を設定する
      • get previous 文が、次の入出力操作の場合、生成されたコードではファイル内の最後のレコードが検索される
    • get previous 文以外の正常な I/O 文は、新しいファイル位置を設定し、同じ EGL レコードに対する後続の get previous 文は直前の ファイル・レコードを読み取る。例えば、get next 文がファイル・レコードを読み取った後、get previous 文は、キーが次に低いレコードを読み取るか endOfFile を戻します。
    • get next 文が endOfFile を戻した場合、 後続の get previous 文は、ファイルの最後のレコードを検索する。
    • 異常終了した getget next、または get previous 文の後、ファイル位置は未定義となり、set record position 書式の set 文によって再設定するか、get next または get previous 文以外の入出力操作によって再設定する必要がある。
  • 代替索引を使用している場合で、ファイル内に複写キーがある場合は、以下の規則が適用される。
    • キーの値がより低いレコードの検索は、get previous 文が、検索された最新のレコードと同じキーを持つすべてのレコードを読み取った後でのみ行われる。複写キー付きレコードが検索される順序は、VSAM がレコードを戻す順序になります。
    • get previous 文が get previous 以外の正常な入出力操作に続く場合、その get previous 文は複写キー付きレコードをスキップオーバーし、キー値が次に低いレコードを検索する。
    • プログラムが同じキーを含むレコード・グループ内の最終レコードを検索した場合、EGL エラー値 duplicate は設定されない。
代替索引内のキーが以下のようになっているファイルについて考えます。
  1, 2, 2, 2, 3, 4

以下の各表は、同じ索引付きレコードに対して一連の EGL 文を実行する場合の効果を示しています。

次に示す 3 つの表は、EGL で生成された COBOL コードに適用されます。

EGL 文 (実行順) 索引付きレコード内のキー 文によって検索されるファイル・レコード内のキー COBOL の場合の EGL エラー値
get 3 3 --
get previous any 2 (3 つある内の最初のもの) duplicate
get previous any 2 (2 番目のもの) duplicate
get previous any 2 (3 番目のもの) --
get previous any 1 --

EGL 文 (実行順) 索引付きレコード内のキー 文によって検索されるファイル・レコード内のキー COBOL の場合の EGL エラー値
set record position 書式の set 2 -- --
get next any 2 (最初のもの) duplicate
get next any 2 (2 番目のもの) --
get previous any 1 --
get previous any -- endOfFile

EGL 文 (実行順) 索引付きレコード内のキー 文によって検索されるファイル・レコード内のキー COBOL の場合の EGL エラー値
set record position 書式の set 1 -- --
get previous any 1 --

次に示す 3 つの表は、EGL で生成された Java コードに適用されます。

EGL 文 (実行順) 索引付きレコード内のキー 文によって検索されるファイル・レコード内のキー Java の場合の EGL エラー値
get 3 3 --
get previous any 2 (3 つある内の最初のもの) duplicate
get previous any 2 (2 番目のもの) duplicate
get previous any 2 (3 番目のもの) --
get previous any 1 --

EGL 文 (実行順) 索引付きレコード内のキー 文によって検索されるファイル・レコード内のキー Java の場合の EGL エラー値
set record position 書式の set 2 -- duplicate
get next any 2 (最初のもの) --
get next any 2 (2 番目のもの) duplicate
get previous any 1 --
get previous any -- endOfFile

EGL 文 (実行順) 索引付きレコード内のキー 文によって検索されるファイル・レコード内のキー Java の場合の EGL エラー値
set record position 書式の set 1 -- --
get previous any 1 --

SQL 処理

get previous 文が SQL レコードに対して操作を行う場合は、コードでは open 文によって選択された行の中から前の行が読み取られます。ただし、scroll オプションを指定した場合に限られます。 get previous 文を発行し、forUpdate オプションも指定されている open 文によって選択された行を取得すると、以下のことができます。
  • EGL replace 文で行を変更する
  • EGL delete 文で行を除去する
  • EGL execute 文で行を変更または除去する

SQL FETCH 文は、生成されたコードでは EGL get previous 文を表します。生成される SQL 文の形式は、INTO 文節の設定以外は変更できません。

最初に選択した行より前にある行へのアクセスを試みる get previous 文を発行すると、EGL ランタイムは次のように動作します。
  • 結果セットからデータをコピーしません。
  • カーソルを開いたままで残し、カーソル位置は変更されません。
  • SQL レコード (もしあれば) を noRecordFound に設定します。

一般に、エラーが発生して処理が続行された場合、カーソルは開いたままで残り、カーソル位置は変更されません。

最終的に、SQL COMMIT または sysLib.commit が指定された場合、open 文で hold オプションを使用したときにのみ、open 文で宣言されていたカーソル内の位置がコードにより保存されます。

フィードバック
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.