DL/I のコンテキストにおいて、EGL get 文は DL/I データベースの単一セグメントを取得します。
このステートメントには、その保存データを後にコードで置換または削除するために使用できる forUpdate オプションがあります。このステートメントを使用して、DL/I セグメントの集合を取り出し、後続の各セグメントの内容を、動的配列で次に位置する DLISegment レコードに配置することもできます。
get ステートメントは DL/I GU (get unique) ステートメントを生成します。 get...forUpdate ステートメントは DL/I GHU ステートメントを生成します。
DL/I に対する get...forUpdate ステートメントの使用例については、DL/I の delete に関する考慮事項を参照してください。
get myCustomer, myLocation, myOrder;
EGL は、以下の疑似 DL/I コードを、このステートメントから生成します。GU STSCCST*D (STQCCNO = :myCustomer.customerNo)
STSCLOC*D (STQCLNO = :myLocation.locationNo)
STPCORD
DLISegment レコードの動的配列を get ステートメントのオブジェクトとして指定する場合には、配列内の最初のレコードに対して DL/I GU 呼び出しを生成し、それ以降の各レコードに対しては GN 呼び出しを生成します。 配列が要素の数を指定していない場合、ステートメントは DL/I ファイルの最後まで、あるいはエラー・コードが出されるまで、GN 呼び出しを生成します。

get next ステートメントは DL/I GN ステートメントを生成します。 get next...forUpdate ステートメントは DL/I GHN ステートメントを生成します。このステートメントは、階層順序で現行セグメントのすぐ後に位置するセグメントを読み取ります。 階層順序とは、データベース・マネージャーが、ルート・セグメントからその階層のできる限り下まで読み取ることを意味します。最初の子の最初の子を読み取るなどしながら、一番下に到達するまで読み取ります。その後、まだ読み取っていない並列の子を検出するまで上に移動し、そのセグメントとすべての子セグメントを読み取ります。
DL/I は get next ステートメントに対するパス呼び出しの使用もサポートしています。 つまり、読み取る最低レベルのセグメントとルートの間にある、すべてのセグメント・レベルの親セグメントを読み取ることができます。
//hostVarQualifier プロパティーを使用して DLI セグメント・レコードを定義する
Record CustomerRecordPart type DLISegment
{ segmentName="STSCCST", keyItem="customerNo", hostVarQualifier="myCustomer" }
...
end
Record LocationRecordPart type DLISegment
{ segmentName="STSCLOC", keyItem="locationNo", hostVarQualifier="myLocation" }
...
end
Record OrderRecordPart type DLISegment
{ segmentName="STPCORD", keyItem="orderDateNo", hostVarQualifier="myOrder" }
...
end
//create variables for the records
myCustomer CustomerRecord;
myLocation LocationRecord;
myOrder OrderRecord;
//build a segment search argument
myCustomer.customerNo = "005001";
myLocation.locationNo = "000022";
myOrder.orderDateNo = "20050730A003";
set myOrder position;
//loop through the orders
while (myOrder not noRecordFound)
try
get next myOrder;
onException
myErrorHandler(2);
end // try を終了する
end // while を終了する
GU STSCCST (STQCCNO = :myCustomer.customerNo)
STSCLOC (STQCLNO = :myLocation.locationNo)
STPCORD (STQCODN = :myOrder.orderDateNo)
EGL は、2 回目以降はループの最後まで GN 呼び出しを使用します。
DLISegment レコードの動的配列を get next ステートメントのオブジェクトとして指定する場合には、その配列内のそれぞれのレコードごとに、DL/I GN 呼び出しを生成します。 配列が要素の数を指定していない場合、ステートメントは DL/I データベースの最後まで、あるいはエラー・コードが出されるまで、GN 呼び出しを生成します。 この状態の他の予測可能な振る舞いについては、get next inParent ステートメントを使用します。
get next inParent ステートメントは、DL/I GNP ステートメント (forUpdate 修飾子がない場合) または GHNP (forUpdate 修飾子がある場合) を生成します。 このステートメントは、現在のデータベース位置のセグメントと同じ親を持つ次の子セグメントを読み取ります。next inParent 修飾子を使用して、DL/I セグメントの集合を動的配列に取り出すことも可能です。
emp.empnum = 1; // レコード emp 内にキーを設定する
try
get emp forUpdate;
onException(dex DLIException)
myErrorHandler(dex); // プログラムを終了する
end
emp.empname = emp.empname + " Smith";
try
replace emp;
onException(dex DLIException)
myErrorHandler(dex);
end
| プラットフォーム | 問題 |
|---|---|
| CICS® for z/OS® | 以下の場合は、get 位置が失われます。
|