DECLARE ステートメントは変数とそのデータ・タイプ、およびオプションで初期値を定義します。
注:
定数を定義するには、CONSTANT を使用します。定数はスキーマ、モジュール、ルーチン、または複合ステートメント (暗黙および明示の両方) 内で宣言できます。それぞれの場合の動作は、以下のリストに示されています。
ルーチン内で宣言された定数または変数は、含まれているモジュールおよびスキーマ内で宣言されているのと同じ名前のすべてのパラメーター、および同じ名前のすべての定数および変数をオーバーレイします。
ユーザー定義のプロパティー (UDP) を指示するには、EXTERNAL を使用します。UDP とは、メッセージ・フロー・エディターによって設計時に初期値を変更したり (メッセージ・フロー・エディターを参照)、ブローカー・アーカイブ・エディターによってデプロイメント時に初期値をオーバーライドしたりできる (ブローカー・アーカイブ・エディターを参照)、ユーザー定義の定数のことで、その初期値はオプションで DECLARE ステートメントによって設定されます。 ESQL によって UDP の値を変更することはできません。
DECLARE ステートメントで UDP の初期値を指定すると、この値がデフォルトになります。しかし、設計時にメッセージ・フロー・エディター内で指定した値や、デプロイメント時にブローカー・アーカイブ・エディター内で指定した値は ( 長さゼロのストリングであっても)、DECLARE ステートメントでコード化された初期値をオーバーライドします。
DECLARE deployEnvironment EXTERNAL CHARACTER 'Dev';deployEnvironment の UDP 変数を、初期値 Dev で定義しています。
メッセージ・フロー・エディターの「UDP」タブを使用して、UDP をメッセージ・フローに追加します。
フローを BAR ファイルに追加する場合、UDP はフローの属性となります。設定した初期値が変更されないようにするために、属性には DECLARE ステートメントの ESQL 変数と同じ名前にする必要があります (この場合は deployEnvironment)。
メッセージ・フロー中のすべての UDP に、DECLARE ステートメントで指定された値か、メッセージ・フロー・エディターまたはブローカー・アーカイブ・エディターによって指定された値がなければなりません。ない場合は、デプロイメント時にエラーが発生します。実行時 (UDP は宣言済み) に、後続の ESQL ステートメントによってその値を照会できます。
UDP の利点は、デプロイメント時に値を変更できることです。例えば、UDP を使用して構成データを保持している場合は、デプロイメント時にノード・レベルでコードに変更を加えずに特定のコンピューター、タスク、または環境用にメッセージ・フローを構成できることになります。
また、実行時に、構成マネージャー・プロキシー (CMP) API を使用して UDP を変更できます。
モジュールまたはスキーマの中でのみ、UDP を宣言することができます。つまり、EXTERNAL キーワードを含む DECLARE ステートメントは MODULE レベルか SCHEMA レベルでしか使用できません。 PROCEDURE や FUNCTION の中で EXTERNAL キーワードを含む DECLARE ステートメントを使用すると、メッセージ・フローをデプロイする際に BIP2402E 例外が発生します。
UDP のデータ・タイプを指定する際には注意が必要です。CAST が使用され、要求された DataType の値が変更されるからです。
UDP の概要については、ESQL でのユーザー定義プロパティーを参照してください。
DECLARE mycolor EXTERNAL CHARACTER 'blue';
DECLARE TODAYSCOLOR EXTERNAL CHARACTER; SET COLOR = TODAYSCOLOR;TODAYSCOLOR は、TYPE が CHARACTER で、VALUE がメッセージ・フロー・エディターによって設定されたユーザー定義プロパティーです。
変数の認識に使用される別名 (別の名前) を定義するには、NAME を使用します。
-- The following statement gives Schema1 an alias of 'Joe'. DECLARE Schema1 NAME 'Joe'; -- The following statement produces a field called 'Joe'. SET OutputRoot.XMLNS.Data.Schema1 = 42; -- The following statement inserts a value into a table called Table1 -- in the schema called 'Joe'. INSERT INTO Database.Schema1.Table1 (Answer) VALUES 42;
DECLARE Schema1 EXTERNAL NAME; CREATE FIRSTCHILD OF OutputRoot.XMLNS.TestCase.Schema1 Domain('XMLNS') NAME 'Node1' VALUE '1'; -- If Schema1 has been given the value 'red', the result would be: <xml version="1.0"?> <TestCase> <red> <Node1>1</Node1> </red>
ネーム・スペースの認識に使用される別名 (別の名前) を定義するには、NAMESPACE を使用します。
次の例は、ネーム・スペース宣言をパス内の SpaceId として、およびネーム・スペース式内の文字定数として使用した場合を例示しています。
DECLARE prefixOne NAMESPACE 'http://www.example.com/PO1'; -- On the right hand side of the assignment a namespace constant -- is being used as such while, on the left hand side, one is -- being used as an ordinary constant (that is, in an expression). SET OutputRoot.XMLNS.{prefixOne}:{'PurchaseOrder'} = InputRoot.XMLNS.prefixOne:PurchaseOrder;
共用変数を定義するには、SHARED を使用します。共用変数は、フロー (スキーマ中で宣言されている場合) またはノード (モジュール中で宣言されている場合) には専用ですが、フローのインスタンス (スレッド) の間では共用されます。 フロー・レベルを超えて見えるタイプの変数はありません。例えば、実行グループ間で変数を共用することはできません。
共用変数は、メッセージ・フローでメモリー内のキャッシュをインプリメントするために使用できます。メッセージ・フロー応答時間の最適化を参照してください。共用変数の存続時間は長く、フローを通過する複数のメッセージに可視になります。存続期間の長い変数を参照してください。
関数やプロシージャー内には共用変数を定義できません。
ユーザーが、データベースの永続性とトランザクション性の利点を犠牲にしてでもパフォーマンスを向上させようと思っている場合、これらの読み取り書き込み変数は理想的です。 これらの読み取り書き込み変数は存続時間が 1 つのメッセージよりも長く、パフォーマンスがデータベースよりも高いからです。
共用変数は複数の追加インスタンスによって更新できるため、共用変数を変更することがないようにしてください。これが行われると、例えば変数がカウンターとして使用されている場合などに、予期せぬ結果を招く可能性があります。
BEGIN ATOMIC 構造体を使用することによって、データの中間段階が他のインスタンスから見えないようにすることができます。 BEGIN ... END ステートメントを参照してください。
ユーザー・プログラムでは、共用行変数を使用して、入力ノードのメッセージの読み取り、書き込み、コピーを効率的に実行できます。そのようにすれば、大きなメッセージを処理するための技法を簡略化できます。
サブツリーは 1 つの共用行変数から別の共用行変数に直接コピーできません。サブツリーは非共用行変数を使用して間接的にコピーできます。1 つの共用行変数から (FIELDVALUE 関数を使用して) 抽出されたスカラー値は、別の共用行変数にコピーできます。