Symfoware Server RDB運用ガイド(データベース定義編) - FUJITSU - |
目次
索引
![]() ![]() |
第3章 データベースの定義変更と削除 | > 3.1 データベースの定義変更 |
論理構造定義の変更の指定方法について説明します。
既存のデータベースの定義に新たにスキーマ定義を追加することができます。スキーマ定義を追加する場合は、スキーマ定義時と同様に、CREATE SCHEMA文で指定します。CREATE SCHEMA文の指定方法の詳細については、“論理構造の定義”を参照してください。
例
在庫管理DBに属するスキーマを追加
CREATE SCHEMA STOCKS ↑ スキーマ名
スキーマ定義の削除をする場合は、DROP SCHEMA文を使用します。以下に指定例を示します。
例
在庫管理DBに属するスキーマを削除
DROP SCHEMA STOCKS RESTRICT ↑ 削除対象のスキーマ名
スキーマ定義を削除するときに、そのスキーマの配下に下記の定義がされている場合は、削除できません。スキーマ定義を削除する前に、これらの定義を削除しておくことが必要です。
順序定義
表定義
ビュー定義
一時表定義
トリガ定義
インデックス定義
格納構造定義
表のDSO定義
インデックスのDSO定義
表のDSI定義
インデックスのDSI定義
プロシジャルーチン定義
ファンクションルーチン定義
ただし、CASCADE指定をした場合は、上記の定義がなされていても無条件に関連する定義すべてを削除します。
スキーマに順序定義を追加する場合は、CREATE SEQUENCE文を使用します。以下に指定例を示します。CREATE SEQUENCE文の指定方法の詳細については、“論理構造の定義”を参照してください。
例
スキーマSTOCKSに順序2の定義を追加
CREATE SEQUENCE STOCKS.順序2 ↑ ↑ スキーマ名 | 順序名 INCREMENT BY 1 START WITH 1 ↑ ↑ 増分値 初期値
順序定義の削除は、DROP SEQUENCE文を使用します。当該順序を参照している実表、ビュー表、プロシジャルーチン、ファンクションルーチンまたはトリガがある場合は、順序定義を削除することはできません。あらかじめ、当該順序を参照している実表、ビュー表、プロシジャルーチン、ファンクションルーチンまたはトリガの定義を削除しておく必要があります。以下に削除例を示します。
例
順序1を削除
DROP SEQUENCE STOCKS.順序1 ↑ ↑ スキーマ名 順序名
スキーマに表定義を追加する場合は、CREATE TABLE文を使用します。以下に指定例を示します。CREATE TABLE文の指定方法の詳細については、“論理構造の定義”を参照してください。
例
スキーマSTOCKSに製品表の定義を追加
CREATE TABLE STOCKS.製品表 (品番 SMALLINT NOT NULL, 品名 NATIONAL CHAR(10),…) ↑ ↑ スキーマ名 表名 ↑ 追加の対象とする実表の表名指定
表の定義の削除は、DROP TABLE文を使用します。当該実表を参照しているビュー表、プロシジャルーチン、ファンクションルーチンまたはトリガがある場合は、表定義を削除することはできません。あらかじめ当該実表を参照しているビュー表、プロシジャルーチン、ファンクションルーチンまたはトリガの定義を削除しておく必要があります。当該実表を参照するビュー定義、プロシジャルーチン定義、ファンクションルーチン定義またはトリガ定義も一緒に削除する場合は、CASCADEを指定します。同様に、実表に対して格納構造定義がある場合も、実表と一緒に格納構造定義を削除する場合は、CASCADEを指定することが必要です。
DROP TABLE文によって表定義を削除すると、同時にデータベースのデータの実体も削除されます。したがって、表定義で誤ってほかの表名を指定すると、定義情報だけでなく大切なデータの本体を失うことになります。DROP TABLE文の使用にあたっては十分な注意が必要です。
表定義の削除例を以下に示します。
例
在庫表の定義情報および在庫表を削除
DROP TABLE STOCKS.在庫表 CASCADE ↑ ↑ ↑ スキーマ名 表名 CASCADE指定 ↑ 削除の対象とする実表の表名指定
表の定義の変更は、ALTER TABLE文を使用します。ALTER TABLE文で以下の変更を行うことができます。
列定義の追加
列定義の削除
実表に列を新たに追加する場合は、ALTER TABLE文に列定義の追加を指定します。1つの表定義変更文で追加できるのは、1列です。追加する列の定義順は、既存の列の後になります。SEQUENTIAL構造の場合は、BLOB型の列の追加により、表の1行に対応するデータが1ページを超えても問題ありません。
追加する列に対する制約は、“NOT NULL”だけ指定可能です。NOT NULLを指定した場合、列定義にはDEFAULT句を指定する必要があります。
既存のデータには、DEFAULT値が設定されます。
また、運用中のデータベースに対して列定義の追加が必要な場合は、アプリケーションを停止せずに列定義を追加することができます。
アプリケーション実行中に列定義を追加する場合は、rdbddlexコマンドの準備モード(lオプション)で定義します。
rdbddlexコマンドの詳細については、“コマンドリファレンス”を参照してください。
列定義の追加の指定例を以下に示します。
例
発注表に“販売価格”列を追加
ALTER TABLE STOCKS.発注表 ADD 販売価格 INTEGER ↑ ↑ ↑ スキーマ名 表名 列定義 ↑ 変更対象表の指定この結果を以下に示します。
[図:表への列の追加]
実表から列を削除する場合は、ALTER TABLE文で列定義削除を指定します。1つの表変更文で1列しか削除できません。削除する列を参照しているビュー定義がある場合は、列削除はできません。また、列に対してインデックスのDSO定義がある場合は、列削除はできません。あらかじめインデックスのDSO定義を削除しておく必要があります。ただし、列に対して一意性制約がある場合は、インデックスのDSO定義を削除していても、削除することはできません。また、列定義の削除で表の列数をゼロにすることはできません。全列を削除する場合は、DROP TABLE文を使用します。列定義の削除の指定例を以下に示します。
例
発注表から仕入価格を削除
ALTER TABLE STOCKS.発注表 DROP 仕入価格 ↑ ↑ ↑ スキーマ名 表名 削除列名 ↑ 変更対象表の指定この結果を以下に示します。
[図:表からの列削除]
定義済みのスキーマにビュー定義を追加する場合は、CREATE VIEW文を使用します。ビュー表の定義の変更はできません。ビュー表の定義の変更は、一度ビュー定義を削除しておいて、あらためてビュー定義を追加する方法で行います。
ビュー定義の追加例を以下に示します。CREATE VIEW文の指定方法の詳細については、“論理構造の定義”を参照してください。
例
スキーマSTOCKSに“電話”ビュー表を追加
CREATE VIEW STOCKS.電話 (社名, 電話番号) ↑ ↑ ↑ スキーマ名 ビュー表名 ビュー表の列名 ↑ 追加対象のビュー表名 AS SELECT 会社名, 電話番号 FROM STOCKS.会社表
定義済みのスキーマからビュー定義を削除する場合は、DROP VIEW文を使用します。削除対象のビュー表を参照する別のビュー表、プロシジャルーチン、ファンクションルーチンまたはトリガの定義がある場合は、当該ビュー定義を削除することはできません。あらかじめ、削除対象のビュー表を参照するビュー表、プロシジャルーチン、ファンクションルーチンまたはトリガの定義を削除しておく必要があります。削除対象のビュー表の定義と、それを参照するビュー表、プロシジャルーチン、ファンクションルーチンまたはトリガの定義も一緒に削除する場合は、CASCADEを指定します。
ビュー定義の削除例を以下に示します。
例
ビュー表“在庫ビュー”の定義を削除
DROP VIEW STOCKS.在庫ビュー CASCADE ↑ ↑ ↑ スキーマ名 ビュー表名 CASCADE指定 ↑ 削除対象のビュー表名
トリガ定義を追加する場合には、トリガ定義文を使用します。トリガ定義文の指定方法の詳細については、“論理構造の定義”を参照してください。
例
トリガ“発注トリガ”を定義
CREATE TRIGGER STOCKS.発注トリガ … ↑ トリガ名
トリガ定義を削除する場合には、DROP TRIGGER文を使用します。
例
トリガ“発注トリガ”の定義を削除
DROP TRIGGER STOCKS.発注トリガ ↑ トリガ名
プロシジャルーチンを追加する場合には、プロシジャルーチン定義文を使用します。プロシジャルーチン定義文の指定方法の詳細については、“論理構造の定義”を参照してください。
例
スキーマSTOCKSにプロシジャルーチンPROC002を追加
CREATE PROCEDURE STOCKS.PROC002 ( IN PARAM1 INT ) ↑ ↑ ルーチン名 パラメタ宣言 BEGIN -+ DECLARE 発注数量変数 INTEGER; | SELECT 発注数量 INTO 発注数量変数 FROM STOCKS.発注表;|→複合文 : | END -+
プロシジャルーチンを削除する場合には、プロシジャルーチン削除文を使用します。削除対象のプロシジャルーチンを呼び出す別のプロシジャルーチンがある場合は、当該プロシジャルーチンを削除することはできません。ただし、CASCADEを指定すると、関連するプロシジャルーチンはすべて削除されます。
例
スキーマSTOCKSからプロシジャルーチンPROC002を削除
DROP PROCEDURE STOCKS. PROC002 ↑ ルーチン名
ファンクションルーチンを追加する場合には、ファンクションルーチン定義文を使用します。ファンクションルーチン定義文の指定方法の詳細については、“論理構造の定義”を参照してください。
例
スキーマSTOCKSに、ファンクションルーチンUSER002を定義する例
![]()
CREATE FUNCTION STOCKS.USER002 ( IN INTEGER, IN INTEGER ) ↑ ↑ ↑ スキーマ名 ルーチン名 パラメタ宣言 RETURNS INTEGER LANGUAGE C ↑ 戻りデータ型 NAME 'ABCDEFG' LIBRARY '/usr/local/lib/libuser1.so' ↑ ↑ シンボル名 ライブラリ
![]()
CREATE FUNCTION STOCKS.USER002 ( IN INTEGER, IN INTEGER ) ↑ ↑ ↑ スキーマ名 ルーチン名 パラメタ宣言 RETURNS INTEGER LANGUAGE C ↑ 戻りデータ型 NAME 'ABCDEFG' LIBRARY 'D:\FORSYMFO\FUNCLIB\USERFUNC001.DLL' ↑ ↑ シンボル名 ライブラリ
ファンクションルーチンを削除する場合には、ファンクションルーチン削除文を使用します。削除対象のファンクションルーチンをSQL文に指定した、プロシジャルーチンやトリガがある場合は、当該ファンクションルーチンを削除することはできません。ただし、CASCADEを指定すると、すべて削除されます。
例
スキーマSTOCKSからファンクションルーチンUSER002を削除
DROP FUNCTION STOCKS.USER002 ↑ ↑ スキーマ名 ルーチン名
注釈定義のうち、表および列の注釈定義は、ALTER TABLE文で変更することができます。以下に例を示します。
例1
表の注釈定義の変更例
ALTER TABLE STOCKS.在庫表 COMMENT '製品名, 在庫数量, 格納倉庫, 販売価格の表' ↑ 変更する注釈定義
例2
列の注釈定義の変更例
ALTER TABLE STOCKS.在庫表 MODIFY 製品番号 COMMENT '製品のコード番号' ↑ 変更する注釈定義
表の交換は、表名を交換することにより、DSOとの関係も交換します。表の交換を行う場合には、SWAP TABLE文を使用します。これにより、以下の効果を得ることができます。
短時間でデータを移行できます。
アプリケーションの変更は必要ありません。
ビューおよびルーチン定義は以前のものをそのまま使用できます。
表の交換の例を、以下に示します。
例
毎日のデータを本日、1日前、2日前・・・という形態で管理する場合、日が変わる契機で、本日のデータを1日前に、1日前のデータを2日前にと順番にデータを移動する運用に表の交換を使用する例を示します。新しい日のデータは初期化して使います。
SWAP TABLE STOCKS.表00 STOCKS.表01; (1) SWAP TABLE STOCKS.表00 STOCKS.表02; (2) : : : SWAP TABLE STOCKS.表00 STOCKS.表29; (29) SWAP TABLE STOCKS.表00 STOCKS.表30; (30)
目次
索引
![]() ![]() |