ここでは、動的SQL文を用いてデータベースを作成する方法を示します。アプリケーションからは、論理構造と、格納構造を定義することができます。アプリケーションの定義の例を以下に示します。
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);
: