ページの先頭行へ戻る
Symfoware Server V12.1.0 データベース簡単運用ガイド
FUJITSU Software

3.3.5 コマンドによるデータベースの作成およびデータの格納

データベースの作成およびデータの格納を、コマンドを利用して行う方法を説明します。

コマンドは、コマンドプロンプトから実行します。

コマンドを使用する場合は、環境変数RDBNAMEにRDBシステム名を設定する必要があります。設定方法については、“環境変数の設定”を参照してください。

参照

コマンドの詳細については、“コマンドリファレンス”を参照してください。

データベースの作成

データベースの作成をrdbddlexコマンドで実施する例を示します。

rdbddlexコマンドでは、DDL文を記述したファイルを指定して実行します。

rdbddlexコマンドの使用方法

入力ファイルからデータベースを作成する例を以下に示します。

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文による方法

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) ;

CSV形式のファイルを使用した方法

rdbuptコマンドを使用し、CSV形式の入力ファイルからデータを格納する例を以下に示します。

rdbupt -ma -b RDBDB.STOCKS.在庫表 -t C:\USERS\DEFAULT\upt-1.txt
                     ↑                         ↑
データベース名.スキーマ名.表名指定      入力ファイル指定

入力ファイルの記述例を以下に示します。

[upt-1.txt]

110, "テレビ", 85, 2
111, "テレビ", 90, 2
123, "冷蔵庫", 60, 1