Symfoware Parallel Server RDBユーザーズガイド データベース定義編
目次 索引 前ページ次ページ

第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 STRIPE(PAGESIZE(32),ORDER(1)"); 
CMDAREA2.sqllen = strlen(CMDAREA2.sqlvar); 
strcpy(CMDAREA3.sqlvar,"CREATE DSI 在庫表DSI 
                            DSO 在庫表DSO 
                            ALLOCATE DATA ON (DBSP_1, DBSP_2, DBSP_3) SIZE 6000M"); 
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 DBSP_4"); 
CMDAREA1.sqllen = strlen(CMDAREA1.sqlvar); 
      :
      :
/* 動的SQL文の実行をします。*/ 
EXEC SQL EXECUTE IMMEDIATE :CMDAREA1; 
      :
      :
/* データ操作の前に“COMMIT”を実行します。*/ 
EXEC SQL COMMIT WORK; 

EXEC SQL INSERT INTO STOCKS.在庫表(製品番号,製品名,在庫数量,倉庫番号) 
                VALUES(:製品番号,:製品名,:在庫数量,:倉庫番号); 
      :
      :

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

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