DL/I の add に関する考慮事項

DL/I のコンテキスト内で add ステートメントを使用すると、このステートメントは 1 つまたは一連のセグメントを階層データベースに追加します。

add ステートメントを使用して、DLISegment レコードの動的配列から複数のセグメントを単一の DL/I データベースに配置することもできます。

add ステートメントは DL/I ISRT ステートメントを生成します。 DL/I では、これはデータベースの現在位置に挿入されます。 この位置決めについては、以下のいずれかの方法で制御してください。
DLISegment レコードの動的配列をデータベースに追加するには、以下を実行します。
  1. DLISegment レコードの動的配列がルート・セグメントの配列でない場合は、親セグメント (その下にレコードを挿入する) のデータベース内に位置を設定する。
  2. add ステートメントを発行し、DLISegment レコードの動的配列の名前を指定する。配列の各レコード内のキー値によって論理位置が決まり、新規セグメントはその位置でデータベースに追加されます。

構文

DL/I の add の構文図に関する考慮事項
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

フィードバック