Symfoware Server WebDBtoolsユーザーズガイド - FUJITSU - |
目次
索引
![]() ![]() |
第6章 WebScript拡張タグ | > 6.3 データベースアクセスタグ |
<!DO>は、SELECT文などのデータベースを処理する文を実行するタグです。
実行の結果を返却する文で、正常に実行された場合、result で指定した変数に結果が出力されます。
<!DO statement [ RESULT=result ] [ ONERROR=onerror ] >
statement :
データベースを処理する文を指定してください。指定できる文と実行条件を、以下に示します。
文 |
構文 |
実行結果 |
実行条件 |
---|---|---|---|
動的SELECT文 |
|
あり |
|
INSERT文 |
なし |
||
UPDATE文:探索 |
|||
DELETE文:探索 |
|||
スキーマ定義文 |
|||
スキーマ操作文 |
|||
格納構造定義文 |
|||
格納構造操作文 |
|||
アクセス制御文 |
|||
利用者制御文 |
|||
システム制御文 |
|||
CALL文 |
なし |
|
|
データベース、 |
なし |
|
|
データベース、 |
|||
CREATE DSO文(インデックスのDSO定義文) |
|
なし |
|
XMLグループ定義文 |
|||
XMLグループ変更文 |
|||
XMLグループ削除文 |
|||
|
あり |
|
|
行検索文 |
|
あり |
|
行操作文 |
なし |
||
トランザクション設定文 |
|||
データベース設定文 |
|||
スキーマ設定文 |
|||
ロール設定文 |
|||
トランザクション文 |
|||
格納構造情報取得文 |
あり |
||
システム表検索文 |
|||
検索情報取得文 |
|||
RDBコマンド用ファイル作成文 |
あり |
|
|
RDBコマンド用ファイル削除文 |
なし |
評価方法は、「一般文字列」です。
result :
検索結果を格納する変数名またはリストの要素を、指定してください。
指定された変数に対する変数宣言が行われていない場合は、ローカル変数として取り扱われます。変数名として指定できるものについては、“命名規約”を参照してください。
動的SELECT文または格納構造情報取得文が実行された場合は、resultで指定した変数に、検索結果がリストとして格納されます。リストの各要素もリストとして格納されます。列に名前がついている場合には、列名がリストのキーの名前になります。
<!DO>タグで、データベースのアクセスや定義を実行した場合は、トランザクションの排他制御が行われます。<!DO>タグを実行したあとは、<!DO “COMMIT”>、<!DO “ROLLBACK”>、<!TRANSACTION>または<!ABORT>タグが実行されるまで処理した資源の排他が行われています。フォーマットファイル終了前に、トランザクションを終了させてください。なお、個別セションで、一連の処理を複数のフォーマットファイルで実施している場合は、一連の処理を終了するフォーマットファイルで、トランザクションを終了させてください。
<!DO>タグを実行したあとに、<!DO “COMMIT”>、<!DO “ROLLBACK”>、<!TRANSACTION>または<!ABORT>タグを実行した場合は、検索結果を格納する変数を参照することはできません。変数の参照が終了したあとに、トランザクションを終了させるタグを実行してください。トランザクションを終了後に参照した場合は、エラーとなるか誤った結果が参照されます。
どの文が実行の結果を返却するかについては、実行文を参照してください。
評価方法は、「左辺値」です。
onerror :
SQL文の実行が失敗した場合に、ラベルに該当する<!CATCH>ブロックを処理します。処理される<!CATCH>ブロック内で、“SYSTEM::DB_ERRORCODE”を参照することができます。
環境パラメタDBErrorHandleまたは<!ERRORHANDLE>タグにより、SQL文の実行に対して、エラー処理を行わない設定になっている場合、onerrorの指定は無効になります。
評価方法は、「一般文字列」です。
データベース処理文には、以下の文があります。
行検索文
行操作文
データベース設定文
トランザクション設定文
スキーマ設定文
ロール設定文
トランザクション文
格納構造情報取得文
システム表検索文
検索情報取得文
RDBコマンド用ファイル作成文
RDBコマンド用ファイル削除文
SELECT 選択リスト FROM スキーマ名.表名 WHERE ROW_ID IS 文字列
WHERE条件のROW_IDは、行の検索前に動的SELECT文の選択リストにROW_IDを指定して検索された文字列を指定します。
選択リストおよびスキーマ名.表名の構文については、“SQLリファレンス”を参照してください。
INSERT INTO スキーマ名.表名
[ (挿入別リスト) ]
VALUES(挿入値リスト)
BLOB型の列に対し値を挿入する場合に、挿入値リストの値指定にファイル定数を指定することができます。
スキーマ名.表名、挿入別リストおよび挿入値リストの構文については、“SQLリファレンス”を参照してください。
UPDATE スキーマ名.表名 SET 設定句:探索 [ { , 設定句:探索 } ・・・ ] WHERE ROW_ID IS 文字列
UPDATE スキーマ名.表名 SET 設定句:探索 [ { , 設定句:探索 } ・・・ ] [ WHERE 探索条件]
BLOB型の列に対し値を更新する場合に、設定句:探索の値指定にファイル定数を指定することができます。WHERE条件のROW_IDは、行の更新前に動的SELECT文の選択リストにROW_ID を指定して検索された文字列を指定します。
スキーマ名.表名および設定句:探索の構文については、“SQLリファレンス”の“探索条件”を参照してください。
DELETE FROM スキーマ名.表名 WHERE ROW_ID IS 文字列
WHERE条件のROW_IDは、行の更新前に動的SELECT文の選択リストにROW_ID を指定して検索された文字列を指定します。
スキーマ名.表名の構文については、“SQLリファレンス”の“名前”を参照してください。
FILE 'ファイル名'
ファイル名をアプリケーション環境パラメタdataDirからの相対パスで指定してください。ただし、パスの一部として「..」を指定することは出来ません。
SET CATALOG データベース名
WebScriptセションのSQLアクセスで、対象となるデータベース名を変更します。
データベース設定文の設定が成功した場合、SYSTEMパッケージ変数“SYSTEM::LOGIN_DATABASE”の値は、データベース設定文に指定されたデータベース名に変更されます。
SQLアクセスには、以下の文があります。
動的SELECT文
INSERT文
UPDATE文:探索
DELETE文:探索
スキーマ定義文
スキーマ操作文
格納構造定義文
格納構造操作文
アクセス制御文
CALL文
行検索文
行操作文
システム表検索文
検索情報取得文
SET TRANSACTION [ READ ONLY | READ WRITE ] [ READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE ]
READ ONLY、READ WRITE:トランザクションアクセスモード READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE:独立性水準
WebScriptセションのトランザクションモードを変更します。
トランザクションモード、トランザクションアクセスモード、独立性水準については、“アプリケーション開発ガイド(埋込みSQL編)”の“トランザクションモードの変更”を参照してください。
トランザクションについては、“アプリケーション開発ガイド(埋込みSQL編)”の“アプリケーションとトランザクション処理”を参照してください。
SET SCHEMA スキーマ名
WebScriptセションのSQLアクセスで、スキーマ名を省略したときのスキーマ名を変更します。
スキーマ設定文の設定が成功した場合、SYSTEMパッケージ変数“SYSTEM::LOGIN_SCHEMA”の値は、スキーマ設定文に指定されたスキーマ名に変更されます。
SQLアクセスには、以下の文があります。
動的SELECT文
INSERT文
UPDATE文:探索
DELETE文:探索
スキーマ定義文
スキーマ操作文
格納構造定義文
格納構造操作文
アクセス制御文
CALL文
行検索文
行操作文
システム表検索文
検索情報取得文
SET ROLE {ロール名|NONE|DEFAULT}
ロール名:現在のログインユーザIDに対して有効とするロールの名前を指定します。
NONE:現在のログインユーザIDに対してロールを無効とします。
DEFAULT:現在のログインユーザIDのデフォルトのロールを有効とします。
ロールについては、“RDB運用ガイド(データベース定義編)”の“権限情報定義”を参照してください。
COMMIT
COMMITを指定した場合は、SQL文のCOMMIT WORKと同じ動作になります。
ROLLBACK
ROLLBACKを指定した場合は、SQL文のROLLBACK WORKと同じ動作になります。
格納構造情報取得文は、データベースの論理構造以外のデータベース定義情報を取得する文です。詳細は、“検索情報取得”を参照してください。
種類 |
格納構造情報取得文 |
意味 |
---|---|---|
DSO一覧 |
GET DSO_LIST |
表に含まれるすべてのDSOの基本情報の一覧を取得します。 |
DSO情報 |
GET DSO_INF |
特定のDSOの詳細情報を取得します。 |
格納キー列一覧 |
GET DSO_STR_KEY_LIST |
特定のDSOのキーを構成する列に関する情報を取得します。 |
分割キー列一覧 |
GET DSO_PAT_KEY_LIST |
特定のDSOが分割格納を行っている場合の分割キーを構成する列に関する情報を取得します。 |
DSI一覧 |
GET DSI_LIST |
特定のDSOに含まれるすべてのDSIの基本情報の一覧を取得します。 |
DSI情報 |
GET DSI_INF |
特定のDSIの詳細情報を取得します。 |
DSI分割値一覧 |
GET DSI_PAT_DATA_LIST |
特定のDSIが分割格納されたDSIの場合に、DSIに定義された分割キーの値の一覧を取得します。 |
DSI割当て情報 |
GET DSI_ALLOC_INF |
特定のDSIの格納構造の要素単位にスペース割当て情報を取得します。 |
DSI割当てデータベース |
GET DSI_DBSPC_LIST |
特定のDSIの格納構造の要素単位にデータベーススペースへの領域の割当て情報を取得します。 |
データベーススペース |
GET DBSPC_LIST |
データベースが含まれるすべてのデータベーススペースの基本情報の一覧を取得します。 |
データベーススペース |
GET DBSPC_PRIV_LIST |
特定のデータベーススペースの権限情報を取得します。 |
一時表データベース |
GET TEMP_TABLE_DBSPC_LIST |
特定の一時表のデータベースへの領域の割当て情報を取得します。 |
インデックス一覧 |
GET INDEX_LIST |
特定の表のインデックス情報を取得します。 |
利用者−データベース |
GET USER_DBSPC_PRIV_LIST |
特定の認可識別子のデータベーススペース権限情報を取得します。 |
ロール−データベース |
GET ROLE_DBSPC_PRIV_LIST |
特定のロールのデータベーススペース権限情報を取得します。 |
データベーススペース |
GET DBSPC_PRIV_ROLE_LIST |
特定のデータベーススペースのロール情報を取得します。 |
GET SYSTEM_TABLE 動的SELECT文
動的SELECT文に、システム表に対する検索を指定します。選択リストの列名に、列のデータ型がCHAR(8)の“CREATE_TIME”を指定した場合、そのデータ型の値は、TIMESTAMP型の文字列表記と同じ形式の文字列に変換されます。
検索情報取得文は問合せ式の選択リストについての情報を取得する文です。詳細は、“検索情報取得”を参照してください。
CREATE FILE ファイル出力文字列
RDBコマンド用ファイル作成文は、RDBコマンドの入力となるファイルを作成する文です。RDBコマンド用ファイル作成文で作成されたファイルは、RDBコマンド用ファイル削除文でファイルを削除するか、またはWebScriptセションの終了時に削除されます。詳細は、“RDBコマンド用ファイル作成”を参照してください。
DROP FILE ファイル名
RDBコマンド用ファイル削除文は、RDBコマンドの入力となるファイルを削除する文です。
<!DO "SELECT NAME1,TEL FROM SCM.TBL1" RESULT=RES> <!HREPLACE 'RES[2]{NAME1}'> <!HREPLACE 'RES[2]{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) 2000またはWindows Server(R) 2003の場合は、使用例の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"> |
<!DO “SET ROLE STOCKS_A1”> <!DO “SELECT 製品名 FROM STOCKS.在庫表” RESULT=r> <!FOREACH r t> <!REPLACE t{製品名}><BR> <!/FOREACH> |
<!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"> |
検索結果は、変数によって参照されている間、メモリに展開されたままになります。結果が必要なくなった場合は、変数に別の値を代入するなどして、参照を解除してください。
目次
索引
![]() ![]() |