第9章 環境パラメタ
D.2 検索情報取得
RDBコマンド用ファイル作成文
CREATE FILE ファイル出力文字列
RDBコマンド用ファイル作成文は、RDBコマンドの入力となるファイルを作成する文です。RDBコマンド用ファイル作 成文で作成されたファイルは、RDBコマンド用ファイル削除文でファイルを削除するか、またはWebScriptセションの 終了時に削除されます。詳細は、“D.3 RDBコマンド用ファイル作成”を参照してください。
RDBコマンド用ファイル削除文 DROP FILE ファイル名
RDBコマンド用ファイル削除文は、RDBコマンドの入力となるファイルを削除する文です。
使用例
検索結果の2レコード目の列名"NAME"、"TEL"に対する値を出力する
<!DO "SELECT NAME1,TEL FROM SCM.TBL1" RESULT=RES>
<!HREPLACE 'RES[2]{NAME1}'>
<!HREPLACE 'RES[2]{TEL}'>
検索結果の全レコードの列名"NAME"、"TEL"に対する値を出力する
<!DO "SELECT NAME1,TEL FROM SCM.TBL1" RESULT=RES>
<!FOREACH RES R>
<!HREPLACE 'R{NAME1}'>
<!HREPLACE 'R{TEL}'>
<!/FOREACH>
データベースの一連の定義とデータ追加を行う
<!DO "CREATE TABLE STOCKS.伝票表(伝票番号 INT,商品 CHAR(100))">
<!DO "CREATE DSO 伝票DSO FROM STOCKS.伝票表 TYPE SEQUENTIAL(PAGESIZE(4),ORDER(1))">
<!DO "CREATE DSI 伝票DSI DSO 伝票DSO ALLOCATE DATA ON DBSP1 SIZE 1M">
<!DO "COMMIT">
<!DO "rdbfmt -mid -i RDBDB.伝票DSI" RESULT=RES>
<!FOREACH RES t1>
結果 <!REPLACE t1><BR>
<!/FOREACH>
<!DO "INSERT INTO STOCKS.伝票表 VALUES(1,'商品A')">
<!DO "INSERT INTO STOCKS.伝票表 VALUES(2,'商品B')">
<!DO "COMMIT">
<!DO "SELECT 伝票番号,商品 FROM STOCKS.伝票表" RESULT=r>
<!FOREACH r t>
伝票番号=<!REPLACE t{伝票番号}>, 商品=<!REPLACE t{商品}><BR>
<!/FOREACH>
指定した表を初期化する
以下の使用例は、SolarisおよびLinuxの場合の例です。Windows(R)の場合は、使用例の4行目(<!SETVAR empty_file "/tmp/null.dat">を、(<!SETVAR empty_file "C:\temp\null.dat">)に変更してください。
<!SETVAR db_name "RDBDB">
<!SETVAR schema_name "STOCKS">
<!SETVAR table_name "伝票表">
<!SETVAR empty_file "/tmp/null.dat">
<!DO "GET DSO_LIST $db_name $schema_name $table_name" RESULT=DSOLIST>
<!FOREACH DSOLIST t1>
<!IF 't1{DSO_TYPE} eq "B"'>
<!SETVAR dso_name t1{DSO_NAME}>
<!DO "GET DSI_LIST $db_name $dso_name" RESULT=DSILIST>
<!FOREACH DSILIST t2>
<!DO "COMMIT">
<!SETVAR dsi_name t2{TABLE_DSI_NAME}>
<!SETVAR command "rdbsloader -mi -i $db_name.$(dsi_name) $empty_file">
rdbsloaderコマンド=<!REPLACE command><BR>
<!DO command RESULT=RES>
<!FOREACH RES t3>
結果 <!REPLACE t3><BR>
<!/FOREACH>
<!/FOREACH>
<!/IF>
<!/FOREACH>
<!DO "COMMIT">
ロール“STOCKS_A1”を有効にして検索を行う
<!DO “SET ROLE STOCKS_A1”>
<!DO “SELECT 製品名 FROM STOCKS.在庫表” RESULT=r>
<!FOREACH r t>
<!REPLACE t{製品名}><BR>
<!/FOREACH>
ロードデータを作成してDSIを初期化する
<!ERRORHANDLE ON>
<!SETVAR array[0] "1,\"商品A\"">
<!SETVAR array[1] "2,\"商品B\"">
<!SETVAR array[2] "3,\"商品C\"">
<!SETVAR array[3] "4,\"商品D\"">
<!SETVAR array[4] "5,\"商品E\"">
<!SETVAR data 'join("\n", array)'>
<!DO "CREATE FILE $data" RESULT=r>
<!SETVAR file r[0]{FILE_NAME}>
<!DO "COMMIT">
<!DO "rdbsloader -mi -i RDBDB.伝票DSI -t $file" RESULT=r>
<!HREPLACE SYSTEM::DB_ERRORCODE><BR>
<!HREPLACE SYSTEM::DB_ERRORMSG><BR>
<!FOREACH r t>
<!REPLACE t><BR>
<!/FOREACH>
<!DO "DROP FILE $file">
注意
検索結果は、変数によって参照されている間、メモリに展開されたままになります。結果が必要なくなった場合は、変数 に別の値を代入するなどして、参照を解除してください。
6.3.2 <!TRANSACTION>
説明
<!TRANSACTION>は、トランザクションの制御を行うタグです。
構文
<!TRANSACTION action >
パラメタ action :
・ COMMITまたはROLLBACKのどちらかを指定してください。
- COMMIT
“COMMIT WORK”というSQL文を実行します。
- ROLLBACK
“ROLLBACK WORK”というSQL文を実行します。
・ 評価方法は、「定数文字列」です。
使用例
<!SETVAR fail 0>
<!TRANSACTION ROLLBACK>
<!SETVAR fail 1>
<!BREAK>
<!/IF>
<!DO "INSERT INTO WL_SCHEMA.製品表(製品名) VALUES ($t)">
<!/FOREACH>
<!IF '!fail'>
<!TRANSACTION COMMIT>
<!/IF>
6.4 表示タグ
表示に関するタグについて説明します。
6.4.1 <!REPLACE>
説明
<!REPLACE>は、指定した値を、指定した形式で、その位置に埋め込むタグです。
構文
<!REPLACE expression [ STYLE=style ] >
パラメタ expression :
・ 出力する文字列や値を指定してください。
・ 評価方法は、「一般文字列」です。
style :
・ NORMALまたはHTMLを指定することができます。省略した場合は、NORMALが指定されます。
・ NORMAL:出力値を無加工のまま、出力します。
・ HTML:以下の変換を行います。
Expression 出力結果
& &
< <
> >
" "
\r <BR>
\n <BR>
・ 評価方法は、「定数文字列」です。
使用例
<!REPLACE "<AAA>" STYLE="HTML">
↓(出力文字列) <AAA>
6.4.2 <!HREPLACE>
変数に関するタグについて説明します。
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>が実行されなかった場合は、フォーマットファイルの処理終了時に自動的に宣 言が解除されます。
構文
<!SETCOOKIE name value [ PATH=path ] [ DOMAIN=domain ] [ EXPIRES=expires ] [ SECURE ]>
パラメタ name :
・ Cookieの名前を命名規約(Cookie名)に従って指定してください。
・ 評価方法は、「定数文字列」です。
value :
・ nameで指定されるCookieの値を指定してください。
・ 評価方法は、「一般文字列」です。
path :
・ Cookieを有効にするURLのパスを指定してください。
・ 評価方法は、「一般文字列」です。
domain :
・ Cookieを有効にするドメインを指定してください。
・ 評価方法は、「一般文字列」です。
expires :
・ Cookieの満了日付を指定してください。
・ 評価方法は、「一般文字列」です。
SECURE :
・ Cookieに"secure"を指定する場合に、指定してください。
使用例
<!SETCOOKIE prev_cond "名称 LIKE '$QUERY::Name'">
注意
指定された<!SETCOOKIE>タグは、機械的にSet-Cookie:に変換されます。したがって、同じ名前で異なる値を持つ<!
SETCOOKIE>タグが指定された場合に、正常な動作は保証されません。
6.6.3 <!PACKAGE>
説明
<!PACKAGE>は、カレントのパッケージが何であるかを指定するタグです。指定されたパッケージが存在しなければ、新
規に作成されます。
構文
<!PACKAGE name >
パラメタ name :
・ パッケージ名を名前の命名規約(パッケージ名)に従って指定してください。