データベースの作成およびデータの格納を、コマンドを利用して行う方法を説明します。
コマンドは、コマンドプロンプトから実行します。
コマンドを使用する場合は、環境変数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) ;