ESQL 変数は、メッセージの処理を支援するために使用されるデータ・フィールドです。
変数は、宣言してタイプを明らかにしてからでなければ使用できません。 変数のデータ・タイプは固定されます。そのため、別のタイプの値を割り当てる ESQL をコード化すると、ターゲットのデータ・タイプへの暗黙的キャストがインプリメントされるか、または例外が生じます (暗黙的キャストがサポートされていない場合)。
変数を定義してそれに名前を付けるには、DECLARE ステートメントを使用します。
ESQL 変数の名前は大/小文字を区別するため、すべての位置で適切な大/小文字を使用してください。 大/小文字が確実に正しく使用されるようにするための最も簡単な方法は、常に大文字の名前を使って変数を定義することです。
WebSphere® Message
Broker Toolkit は、未定義の変数にマークを付けます。 メッセージ・フローをデプロイする前にこれらの警告をすべて除去してください。
DECLARE ステートメントでは、変数に初期値を割り当てることができます。 初期値を指定しないと、
スカラー変数は特殊値 NULL で初期化され、そして ROW 変数は空の状態に初期化されます。 その後、SET ステートメントを使用して変数の値を変更できます。
モジュール・レベルで宣言された ESQL 変数は、単一のノードに属します。
ただし、スキーマ・レベルで宣言された変数は、そのスキーマを参照する各ノードにも提供されます。
そのため、スキーマ・レベルの変数は 1 回だけ宣言されますが、各 ESQL ノードは独自のコピーを保持します。そのコピーは、変数が SHARED とマークされていない限り、他のノードと共有されません。
以下の 3 種類の組み込みノードは、ESQL コードを含めることができるので、ESQL 変数の使用がサポートされます。
変数の有効範囲、存続時間、および共用特性
変数の有効範囲、存続時間、および共用特性は、特定の ESQL 変数を使用できる範囲と使用可能な期間を説明します。
- 有効範囲
- 変数が可視となる範囲を表す指標です。 ブローカー環境では、通常、変数のスコープは個々のノードに限られます。
- 存続時間
- 変数が値を保持する期間を表す指標です。
ブローカー環境では、変数の存続時間はさまざまに異なりますが、通常はノード内のスレッドの存続時間に限定されます。
- 共用特性
- 各スレッドが変数の独自のコピーを所有するか、それとも 1 つの変数が多数のスレッドの間で共用されるかを示します。 ブローカー環境では、通常、変数は共用されません。
変数のタイプ
- 外部
- 外部変数 (EXTERNAL キーワードで定義される) は、ユーザー定義プロパティー とも呼ばれます。ESQL でのユーザー定義プロパティーを参照してください。 これらはメッセージ・フローの存続期間にわたって存在し、フローを通過するすべてのメッセージにとって可視です。 外部変数は、モジュール・レベルとスキーマ・レベルでのみ定義可能です。 外部変数の初期値 (オプションで、DECLARE ステートメントによって設定される) は、メッセージ・フロー・エディターを使用して設計時に、またはブローカー・アーカイブ・エディターを使用してデプロイメント時に変更できます。 メッセージ・ブローカー API (CMP API としても知られる) を使用することによって、ユーザー定義のプロパティーの値を実行時に照会および設定することもできます。 詳しくは、CMP アプリケーションでの実行時のメッセージ・フローのユーザー定義プロパティーの設定を参照してください。
- 通常
- 通常変数 の存続時間は、単に 1 つのメッセージがノードを通過するまでです。 この種の変数は、このメッセージのみに可視です。 通常変数を定義するには、EXTERNAL と SHARED キーワードを両方とも省略します。
- 共用
- 共用変数 は、メッセージ・フローでメモリー内のキャッシュをインプリメントするために使用できます。メッセージ・フロー応答時間の最適化を参照してください。
共用変数の存続時間は長く、フローを通過する複数のメッセージに可視になります。存続期間の長い変数を参照してください。
共用変数は、実行グループのプロセスの存続時間、フローまたはノードの存続時間、または変数を宣言するノードの SQL の存続時間のうちで最も短い期間にわたって存在します。 共用変数は、個々のブローカーの始動後に最初のメッセージがフローまたはノードを移動する際に初期化されます。
BEGIN ... END ステートメントの ATOMIC オプションも参照してください。 BEGIN ATOMIC の構成は、共用変数に多数の変更を加える必要がある場合や、他のインスタンスがデータの中間状態を参照しないようにすることが重要な場合に便利です。