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