第6章 WebScript拡張タグ
6.5 変数タグ
変数に関するタグについて説明します。
6.5.1 <!VAR>
説明
<!VAR>は、変数の宣言を行うタグです。
scope がGLOBALの場合は、セション終了時または<!UNDEFVAR>の実行まで使用することができます。LOCALの場
合は、フォーマットファイル内で有効となります。
構文
<!VAR name [ SCOPE=scope ] [ VALUE=value ] >
パラメタ name :
・ “6.1.2 命名規約”の(変数名)にしたがって変数名を指定してください。
・ グローバル変数の宣言で、カレントパッケージ以外のグローバル変数を宣言する場合は、変数名をパッケージ名で 修飾する必要があります。
scope :
・ グローバル変数として宣言する場合は、GLOBALを指定し、ローカル変数として宣言する場合は、LOCALを指定し てください。省略した場合はGLOBALとなります。
・ 評価方法は、「定数文字列」です。
value :
・ 初期値を指定してください。省略した場合、値は未定義となります。
・ 評価方法は、「一般データ」です。
使用例
<!VAR cond SCOPE="GLOBAL" VALUE="名称 LIKE '$QUERY::Name'">
注意
共有セションの場合は、グローバル変数の宣言はできません。
scopeがLOCALの場合、同名の変数がすでに存在していると、エラーになります。
scope がGLOBALの場合、対象とするパッケージ内に同名の変数がすでに存在していると、エラーになります。
変数の参照により、カレントパッケージのグローバル変数およびローカル変数で同名の変数名が存在した場合、パッケー ジ名で修飾しなければローカル変数の値が参照されます。
6.5.2 <!SETVAR>
説明
<!SETVAR>は、変数およびリスト要素の値を更新するタグです。
<!VAR>で定義していない変数に対して、<!SETVAR>で変数に値を設定すると、ローカル変数が定義されます。
グローバル変数の場合、変数名をパッケージ名で修飾することで、カレントパッケージ以外のグローバル変数の値を更 新することができます。
構文
<!SETVAR name value [ REF ] >
パラメタ name :
・ 更新する変数またはリストの要素を指定してください。
・ 評価方法は、「左辺値」です。
value :
・ name に指定した変数またはリストの要素に設定する値を指定してください。
・ 評価方法は、「一般データ」です。
REF :
・ REFパラメタを指定しない場合は、name にvalue の値が設定されます。
・ REFパラメタを指定した場合、valueは存在する変数または存在するリストの要素になります。この場合は、nameがvalue と同一のデータを指すようになります。
・ valueは、存在する変数または存在するリストの要素になるようにしてください。
概念図
使用例
(1) 単純な入力
<!SETVAR X 100> Xの値は100
<!SETVAR Y '100 + 300'> Yの値は400
<!SETVAR Z X> Zの値は100
<!SETVAR X 50> Xの値は50となるがZの値は100のまま (2) REFパラメタ
<!SETVAR X 100>
<!SETVAR Y 200>
<!SETVAR P X REF> PはXと同じデータを指す PとXの値は100
<!SETVAR X 300> PとXの値はともに300
<!SETVAR P 400> PとXの値はともに400
<!SETVAR P Y REF> PはYと同じデータを指す
PとYの値は200、Xの値は400のまま
<!SETVAR P 500> PとYの値は500
<!SETVAR A '(0,1,2)'>
<!SETVAR B[0] A[0] REF>
<!SETVAR B[1] A[10] REF> <誤り>要素A[10]は存在しない
<!SETVAR B[2] 200 REF> <誤り>200は変数でもリスト要素でもない
(3) REFの用途:構造データ
<!SETVAR 'PERSON1{Name}' "山田">
<!SETVAR 'PERSON1{Age}' 25>
<!SETVAR 'PERSON2{Name}' "田中">
<!SETVAR 'PERSON2{Age}' 23>
(4) REFの用途:効率の問題
<!DO "SELECT * FROM SCM.TBL1" RESULT=r>
rに大量のデータが入っている
<!SETVAR a r> aにr全体のデータがコピーされる 時間と大量のメモリが消費される
<!SETVAR b r REF> bはrと同じデータを指す
時間もメモリもほとんど消費しない
6.5.3 <!UNDEFVAR>
説明
<!UNDEFVAR>は、変数の宣言を解除するタグです。
指定された変数が宣言されていない場合は、エラーになります。
システムが用意する変数は指定できません。
構文
<!UNDEFVAR name>
パラメタ name :
・ 変数名を指定してください。
・ 評価方法は、「左辺値」です。
使用例
<!VAR abc VALUE="global-abc" SCOPE="GLOBAL">
<!VAR abc VALUE="local-abc" SCOPE="LOCAL">
<!REPLACE 'abc'> → ローカル変数のabcが参照されます。値は「local-abc」です。
<!UNDEFVAR abc> → ここでは、ローカル変数のabcの定義がなくなります。
<!REPLACE 'abc'> → ローカル変数abcが存在しないため、グローバルabcを参照します。
値は「global-abc」です。
<!UNDEFVAR abc> → ここでは、グローバル変数のabcの定義がなくなります。
<!REPLACE 'abc'> → ローカル変数abc、グローバル変数abcがともに存在しないため、
結果は空文字列となります。
備考
ローカル変数に対して、<!UNDEFVAR>が実行されなかった場合は、フォーマットファイルの処理終了時に自動的に宣 言が解除されます。