Symfoware Server WebDBtoolsユーザーズガイド - FUJITSU -
目次 索引 前ページ次ページ

第6章 WebScript拡張タグ> 6.3 データベースアクセスタグ

6.3.1 <!DO>

■説明

<!DO>は、SELECT文などのデータベースを処理する文を実行するタグです。

実行の結果を返却する文で、正常に実行された場合、result で指定した変数に結果が出力されます。

■構文

<!DO statement [ RESULT=result ] [ ONERROR=onerror ] >

■パラメタ

statement :

result :

onerror :

データベース処理

データベース処理文には、以下の文があります。

◆行検索文

    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アクセスには、以下の文があります。

◆トランザクション設定文

    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アクセスには、以下の文があります。

◆ロール設定文

  SET ROLE {ロール名|NONE|DEFAULT}

ロール名:現在のログインユーザIDに対して有効とするロールの名前を指定します。
NONE:現在のログインユーザIDに対してロールを無効とします。
DEFAULT:現在のログインユーザIDのデフォルトのロールを有効とします。

ロールについては、“RDB運用ガイド(データベース定義編)”の“権限情報定義”を参照してください。

◆トランザクション文

【COMMIT

    COMMIT

COMMITを指定した場合は、SQL文のCOMMIT WORKと同じ動作になります。

【ROLLBACK

    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型の文字列表記と同じ形式の文字列に変換されます。

◆検索情報取得文

検索情報取得文は問合せ式の選択リストについての情報を取得する文です。詳細は、“検索情報取得”を参照してください。

◆RDBコマンド用ファイル作成文

    CREATE FILE ファイル出力文字列

RDBコマンド用ファイル作成文は、RDBコマンドの入力となるファイルを作成する文です。RDBコマンド用ファイル作成文で作成されたファイルは、RDBコマンド用ファイル削除文でファイルを削除するか、またはWebScriptセションの終了時に削除されます。詳細は、“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) 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">

◆ロール“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">

検索結果は、変数によって参照されている間、メモリに展開されたままになります。結果が必要なくなった場合は、変数に別の値を代入するなどして、参照を解除してください。

目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2007