データベースの作成およびデータの格納を、コマンドを利用して行う方法を説明します。
コマンドは、コマンドプロンプトから実行します。
コマンドを使用する場合は、環境変数RDBNAMEにRDBシステム名を設定する必要があります。設定方法については、“環境変数の設定”を参照してください。
参照
コマンドの詳細については、“コマンドリファレンス”を参照してください。
データベースの作成をrdbddlexコマンドで実施する例を示します。
rdbddlexコマンドでは、DDL文を記述したファイルを指定して実行します。
入力ファイルからデータベースを作成する例を以下に示します。
rdbddlex -d RDBDB C:\USERS\DEFAULT\ddl-1.dat
rdbddlex -d RDBDB -x C:\USERS\DEFAULT\ddl-2.dat ↑ ↑ データベース名指定 入力ファイル指定
入力ファイルの記述規則を以下に示します。
1文の終りにセミコロン(;)を指定します。
CREATE PROCEDURE文は、1文を“EXEC SQL”と“END-EXEC”で囲みます。
注釈は、連続した2個のハイフン“--”で記述することができます。“--”以降その行の右終端までを注釈とみなします。
Windowsの場合の入力ファイルの記述例を以下に示します。
[ddl-1.dat]
--*----------------------------------------------------------------------------*
-- データベースを定義
--*----------------------------------------------------------------------------*
CREATE DATABASE RDBDB ;
--*----------------------------------------------------------------------------*
-- スキーマを定義
--*----------------------------------------------------------------------------*
CREATE SCHEMA STOCKS ;
--*----------------------------------------------------------------------------*
-- 実表(在庫表、発注表、会社表、高額発注表)を定義
--*----------------------------------------------------------------------------*
CREATE TABLE STOCKS.在庫表
( 製品番号 SMALLINT NOT NULL,
製品名 NCHAR(10) NOT NULL,
在庫数量 INTEGER,
倉庫番号 SMALLINT,
PRIMARY KEY (製品番号));
CREATE TABLE STOCKS.発注表
( 取引先 SMALLINT NOT NULL,
取引製品 SMALLINT NOT NULL,
仕入価格 INTEGER,
発注数量 SMALLINT);
CREATE TABLE STOCKS.会社表
( 取引先 SMALLINT NOT NULL,
会社名 NCHAR(10) NOT NULL,
電話番号 CHARACTER(14),
住所 NCHAR(20),
PRIMARY KEY (会社名));
CREATE TABLE STOCKS.高額発注表
( 取引先 SMALLINT NOT NULL,
仕入価格 INTEGER,
発注数量 SMALLINT);
--*----------------------------------------------------------------------------*
-- インデックスを定義
--*----------------------------------------------------------------------------*
CREATE INDEX STOCKS.発注表.IDX1 KEY(取引先);
--*----------------------------------------------------------------------------*
-- ビュー表(大量在庫表、大量発注表)を定義
--*----------------------------------------------------------------------------*
CREATE VIEW STOCKS.大量在庫表(品番,数量)
AS SELECT 製品番号, 在庫数量
FROM STOCKS.在庫表
WHERE 在庫数量 >= 50;
CREATE VIEW STOCKS.大量発注表(取引製品, 仕入価格)
AS SELECT 取引製品, 仕入価格
FROM STOCKS.発注表
WHERE 発注数量 >= 100;
--*----------------------------------------------------------------------------*
-- 順序を定義
--*----------------------------------------------------------------------------*
CREATE SEQUENCE STOCKS.順序1
INCREMENT BY 1
START WITH 1 ;
--*----------------------------------------------------------------------------*
-- トリガを定義
--*----------------------------------------------------------------------------*
CREATE TRIGGER STOCKS.発注トリガ
AFTER INSERT
ON STOCKS.発注表
REFERENCING NEW AS NEWREC
FOR EACH ROW
WHEN(NEWREC.仕入価格 * NEWREC.発注数量 > 5000000)
INSERT INTO STOCKS.高額発注表
VALUES(NEWREC.取引先,NEWREC.仕入価格,NEWREC.発注数量) ;
--*----------------------------------------------------------------------------*
-- ファンクションルーチンを定義
--*----------------------------------------------------------------------------*
CREATE FUNCTION STOCKS.USER001 ( IN INTEGER, IN INTEGER )
RETURNS INTEGER LANGUAGE C
NAME 'ABCDEFG' LIBRARY 'D:\FUNCLIB\LIBUSER1.DLL' ;
--*----------------------------------------------------------------------------*
-- 一時表を定義
--*----------------------------------------------------------------------------*
CREATE GLOBAL TEMPORARY TABLE STOCKS.在庫一時表
(製品番号 SMALLINT NOT NULL,
在庫数量 INTEGER,
倉庫番号 SMALLINT,
PRIMARY KEY(製品番号))
ON COMMIT DELETE ROWS
ON DEFAULT DBSPACE 10;
--*----------------------------------------------------------------------------*
-- 権限を定義
--*----------------------------------------------------------------------------*
GRANT SELECT,INSERT,UPDATE ON STOCKS.発注表 TO SATO,SUZUKI,TANAKA;
GRANT SELECT,UPDATE,INSERT,DELETE ON STOCKS.会社表 TO SATO,SUZUKI,TANAKA;
[ddl-2.dat]
--*----------------------------------------------------------------------------*
-- プロシジャルーチンを定義
--*----------------------------------------------------------------------------*
EXEC SQL
CREATE PROCEDURE STOCKS.在庫追加(
IN 対象番号 SMALLINT,
IN 対象製品名 NCHAR(10),
IN 対象倉庫 SMALLINT,
IN 追加数量 INTEGER,
OUT 結果数量 INTEGER,
OUT PRCSTATE CHAR(5),
OUT PRCMSG CHAR(255)
)
BEGIN
DECLARE SQLSTATE CHAR(5);
DECLARE SQLMSG CHAR(255);
UPDATE STOCKS.在庫表 SET 在庫数量 = 在庫数量 + 追加数量
WHERE 製品番号 = 対象番号 AND 製品名 = 対象製品名
AND 倉庫番号 = 対象倉庫;
IF SQLSTATE = '02000' THEN
INSERT INTO STOCKS.在庫表
VALUES(対象番号,対象製品名,対象倉庫,追加数量);
IF SQLSTATE <> '00000' THEN
GOTO ERR_END;
END IF;
ELSEIF SQLSTATE <> '00000' THEN
GOTO ERR_END;
END IF;
SELECT 在庫数量 INTO 結果数量
FROM STOCKS.在庫表
WHERE 製品番号 = 対象番号 AND 製品名 = 対象製品名
AND 倉庫番号 = 対象倉庫;
IF SQLSTATE <> '00000' THEN
GOTO ERR_END;
END IF;
LEAVE 在庫追加;
ERR_END:
SET PRCSTATE = SQLSTATE;
SET PRCMSG = SQLMSG;
END
END-EXEC ;
データの格納方法には、以下の2つがあります。
SQL文による方法
CSV形式のファイルを使用した方法
rdbexecsqlコマンドを使用し、入力ファイルからデータを格納する例を以下に示します。
rdbexecsql -s RDBDB -i C:\USERS\DEFAULT\dml-1.dat ↑ ↑ データベース名指定 入力ファイル指定
入力ファイルの記述規則を以下に示します。
1文の終りにセミコロン(;)を指定します。
注釈は、連続した2個のハイフン“--”で記述することができます。“--”以降その行の右終端までを注釈とみなします。
入力ファイルの記述例を以下に示します。
[dml-1.dat]
--*----------------------------------------------------------------------------* -- データを格納 --*----------------------------------------------------------------------------* INSERT INTO STOCKS.在庫表 VALUES (110, N'テレビ', 85, 2) ; INSERT INTO STOCKS.在庫表 VALUES (111, N'テレビ', 90, 2) ; INSERT INTO STOCKS.在庫表 VALUES (123, N'冷蔵庫', 60, 1) ;