DL/I の add に関する考慮事項
DL/I のコンテキスト内で add ステートメントを使用すると、このステートメントは 1 つまたは一連のセグメントを階層データベースに追加します。
add ステートメントを使用して、DLISegment レコードの動的配列から複数のセグメントを単一の DL/I データベースに配置することもできます。
add ステートメントは DL/I ISRT ステートメントを生成します。
DL/I では、これはデータベースの現在位置に挿入されます。
この位置決めについては、以下のいずれかの方法で制御してください。
- ご使用の EGL プログラム内で明示的にキーを設定する (このトピックの『例』を参照)。
- get ステートメントを使用する (DL/I の get に関する考慮事項を参照)。
- #dli ディレクティブを通して修飾 SSA を作成する (#dli ディレクティブを参照)。
DLISegment レコードの動的配列をデータベースに追加するには、以下を実行します。
- DLISegment レコードの動的配列がルート・セグメントの配列でない場合は、親セグメント (その下にレコードを挿入する) のデータベース内に位置を設定する。
- add ステートメントを発行し、DLISegment レコードの動的配列の名前を指定する。配列の各レコード内のキー値によって論理位置が決まり、新規セグメントはその位置でデータベースに追加されます。
構文

- DLISegmentVariable
- DLISegment 変数の名前。
- usingPCB pcbName
- PSB レコードで定義されている PCB の名前を指定して、デフォルトの PCB の代わりに使用するオプション。
- with #dli{ dliStatement }
- 明示的 DL/I ISRT 呼び出しを行うオプション。#dli ディレクティブを参照してください。 #dli と左中括弧の間にスペースは入れません。
- DLIDynamicArray
- DLISegment レコードで構成される動的配列の名前。
パス呼び出し
DL/I は add ステートメントに対するパス呼び出しの使用もサポートしています。
パス呼び出しを使用するときは、追加する最低レベルのセグメントとルートの間にあるすべてのセグメント・レベルについて親セグメントを追加できます。
次の例では、DL/I は新規の顧客とロケーションを、新規のオーダーと同時に追加します。
add myCustomer, myLocation, myOrder;
EGL は、以下の疑似 DL/I コードを、このステートメントから生成します。
ISRT STSCCST*D (STQCCNO = :myCustomer.customerNo)
STSCLOC (STQCLNO = :myLocation.locationNo)
STPCORD
例
以下の例は、顧客データベースにオーダーを追加します。
//hostVarQualifier プロパティーを使用して DLI セグメント・レコードを定義する
Record CustomerRecord type DLISegment
{ segmentName="STSCCST", keyItem="customerNo", hostVarQualifier="myCustomer" }
...
end
Record LocationRecord type DLISegment
{ segmentName="STSCLOC", keyItem="locationNo", hostVarQualifier="myLocation" }
...
end
Record OrderRecord type DLISegment
{ segmentName="STPCORD", keyItem="orderDateNo", hostVarQualifier="myOrder" }
...
end
//create variables for the records
myCustomer CustomerRecord;
myLocation LocationRecord;
myOrder OrderRecord;
//セグメント検索パラメーターをビルドする
myCustomer.customerNo = "005001";
myLocation.locationNo = "000022";
//オーダー・レコード内のフィールドに入力する
fillOrder(myOrder);
//新規のオーダー・レコードを追加する
try
add myOrder;
onException(dex DLIException)
myErrorHandler(dex);
end
この add ステートメントは、以下の疑似 DL/I コードを生成します。
ISRT STSCCST (STQCCNO = :myCustomer.customerNo)
STSCLOC (STQCLNO = :myLocation.locationNo)
STPCORD
顧客とロケーションの修飾済みのセグメント検索パラメーター (SSA) は、新規のオーダー・セグメントの親セグメントを識別します。 DL/I は、そのセグメント orderDateNo (STQCODN) に対して keyItem フィールドで決められた場所に新規のオーダー・セグメントを追加します。
エラーに関する考慮事項
「noRecordFound」のような「ソフト」の入出力エラーを収集するには、値の設定ブロックを使用して、throwNrfEofExceptions プログラム・プロパティーを YES に設定します。
onException ブロックで、次のように「is」または「not」演算子を指定してエラーのテストを行います。
if (myOrder is unique)
...
end
可能性のあるランタイム・エラーには、以下のようなものがあります。- 指定されたキーを持つオーダー・セグメントが既に存在する場合の unique (重複不可)。
- 同じキーを持つオーダー・セグメントが存在するが、重複が許可されている場合の duplicate。