Symfoware Server RDB運用ガイド(データベース定義編) - FUJITSU -
目次 索引 前ページ次ページ

第2章 データベースの作成> 2.3 データベースの作成方法

2.3.2 アプリケーションから定義する方法

ここでは、動的SQL文を用いてデータベースを作成する方法を示します。アプリケーションからは、論理構造と、格納構造を定義することができます。データベース名の登録とデータベーススペースの作成は行うことができないため、前もってrdbddlexコマンドで、データベース名の登録とデータベーススペースの作成を行っておきます。

アプリケーションの定義の例を以下に示します。

SQL文変数を“CMDAREA1〜3”とします。使用言語は、C言語です。

アプリケーションの定義の例

        :
/*  定義文をSQL文変数に複写します。*/
strcpy(CMDAREA1.sqlvar,"CREATE SCHEMA STOCKS "
                       "CREATE TABLE  在庫表(製品番号  SMALLINT NOT NULL,"
                                            "製品名    NATIONAL CHARACTER(10) NOT NULL,"
                                            "在庫数量  INTEGER,"
                                            "倉庫番号  SMALLINT,"
                                            "PRIMARY KEY(製品番号) )"
                       "CREATE VIEW  大量在庫表(品番, 数量)"
                                     "AS SELECT  製品番号,在庫数量 FROM STOCKS.在庫表 "
                                     "WHERE  在庫数量 >= 50");
CMDAREA1.sqllen = strlen(CMDAREA1.sqlvar);
strcpy(CMDAREA2.sqlvar,"CREATE DSO 在庫表DSO FROM STOCKS.在庫表 "
                                     "TYPE SEQUENTIAL(PAGESIZE(4),ORDER(1))");
CMDAREA2.sqllen = strlen(CMDAREA2.sqlvar);
strcpy(CMDAREA3.sqlvar,"CREATE DSI 在庫表DSI "
                              "DSO 在庫表DSO "
                              "ALLOCATE DATA ON DBSPACE1 SIZE 280K");
CMDAREA3.sqllen = strlen(CMDAREA3.sqlvar);
      :
/*  動的SQL文の実行をします。*/
EXEC SQL EXECUTE IMMEDIATE :CMDAREA1;
EXEC SQL EXECUTE IMMEDIATE :CMDAREA2;
EXEC SQL EXECUTE IMMEDIATE :CMDAREA3;
      :

また、アプリケーションからデータベースの定義を行うとき、格納構造を簡略化して定義する場合は、1つのアプリケーションで定義から創成までができます。ただし、データ操作を行う前にCOMMIT文を記述する必要があります。

以下に例を示します。

アプリケーションによる定義から創成までの例

        :
/*  定義文をSQL文変数に複写します。*/
strcpy(CMDAREA1.sqlvar,"CREATE SCHEMA STOCKS "
                       "CREATE TABLE  在庫表(製品番号  SMALLINT NOT NULL,"
                                            "製品名    NATIONAL CHARACTER(10) NOT NULL,"
                                            "在庫数量  INTEGER,"
                                            "倉庫番号  SMALLINT,"
                                            "PRIMARY KEY(製品番号)"
                                            ")  ON DBSPACE1");
CMDAREA1.sqllen = strlen(CMDAREA1.sqlvar);
      :
/*  動的SQL文の実行をします。*/
EXEC SQL EXECUTE IMMEDIATE :CMDAREA1;
      :
/*  データ操作の前に“COMMIT”を実行します。*/
EXEC SQL COMMIT WORK; 
EXEC SQL INSERT INTO STOCKS.在庫表(製品番号,製品名,在庫数量,倉庫番号)
                VALUES(:ITMNO,:PRODUCT,:STOCKQTY,:WHCODE);
      :

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

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