Symfoware Parallel Server RDBユーザーズガイド データベース定義編 |
目次
索引
![]() ![]() |
第3章 データベースの定義変更と削除 | > 3.1 データベースの定義変更 |
既存のデータベースの定義に新たにスキーマ定義を追加することができます。スキーマ定義を追加する場合は、スキーマ定義時と同様に、CREATE SCHEMA文で指定します。CREATE SCHEMA文の指定方法の詳細については、“論理構造の定義”を参照してください。
例
在庫管理DBに属するスキーマを追加します。
CREATE SCHEMA STOCKS (1)(1) スキーマ名
スキーマ定義の削除をする場合は、DROP SCHEMA文を使用します。以下に指定例を示します。
例
在庫管理DBに属するスキーマを削除します。
DROP SCHEMA STOCKS RESTRICT (1)(1) 削除対象のスキーマ名
スキーマ定義を削除するときに、そのスキーマの配下に下記の定義がされている場合は、削除できません。スキーマ定義を削除する前に、これらの定義を削除しておくことが必要です。
表定義
ビュー定義
インデックス定義
格納構造定義
表のDSO定義
インデックスのDSO定義
表のDSI定義
インデックスのDSI定義
プロシジャルーチン定義
ただし、CASCADE指定をした場合は、上記の定義がなされていても無条件に関連する定義すべてを削除します。
スキーマに表定義を追加する場合は、CREATE TABLE文を使用します。以下に指定例を示します。CREATE TABLE文の指定方法の詳細については、“論理構造の定義”を参照してください。
例
スキーマSTOCKSに製品表の定義を追加します。
CREATE TABLE STOCKS.製品表 (品番 SMALLINT NOT NULL, 品名 NATIONAL CHAR(10),…) (1) (2) (3)(1) スキーマ名
(2) 表名
(3) 追加の対象とする実表の表名指定
表の定義の削除は、DROP TABLE文を使用します。
当該実表を参照しているビュー表またはプロシジャルーチンがある場合は、表定義を削除することはできません。あらかじめ、当該実表を参照しているビュー表またはプロシジャルーチンの定義を削除しておく必要があります。当該実表を参照するビュー定義およびプロシジャルーチン定義も一緒に削除する場合は、CASCADEを指定します。
同様に、実表に対して格納構造定義がある場合も、実表と一緒に格納構造定義を削除する場合は、CASCADEを指定することが必要です。
DROP TABLE文によって表定義を削除すると、同時にデータベースのデータの実体も削除されます。したがって、表定義で誤ってほかの表名を指定すると、定義情報だけでなく大切なデータの本体を失うことになります。DROP TABLE文の使用にあたっては十分な注意が必要です。
表定義の削除例を以下に示します。
例
在庫表の定義情報および在庫表を削除します。
DROP TABLE STOCKS.在庫表 CASCADE (1) (2) (3) (4)(1) スキーマ名
(2) 表名
(3) CASCADE指定
(4) 削除の対象とする実表の表名指定
表の定義の変更は、ALTER TABLE文を使用します。ALTER TABLE文で以下の変更を行うことができます。
列定義の追加
列定義の削除
実表に列を新たに追加する場合は、ALTER TABLE文に列定義の追加を指定します。1つの表定義変更文で追加できるのは、1列です。追加する列の定義順は、既存の列の後になります。
また、追加する列に対する制約は、NOT NULLだけ指定可能です。NOT NULLを指定した場合、列定義にはDEFAULT句を指定する必要があります。
なお、既存のデータには、DEFAULT値が設定されます。
列定義の追加の指定例を以下に示します。
例
発注表に“販売価格”列を追加します。この結果を図:表への列の追加に示します。
ALTER TABLE STOCKS.発注表 ADD 販売価格 INTEGER (1) (2) (3) (4)(1) スキーマ名
(2) 表名
(3) 列定義
(4) 変更対象表の指定
図:表への列の追加
実表から列を削除する場合は、ALTER TABLE文で列定義削除を指定します。1つの表変更文で1列しか削除できません。削除する列を参照しているビュー定義がある場合は、列削除はできません。また、列に対してインデックスのDSO定義がある場合は、列削除はできません。あらかじめインデックスのDSO定義を削除しておく必要があります。ただし、列に対して一意性制約がある場合は、インデックスのDSO定義を削除していても、削除することはできません。また、列定義の削除で表の列数をゼロにしてしまうことはできません。全列を削除する場合は、DROP TABLE文を使用します。列定義の削除の指定例を以下に示します。
例
発注表から仕入価格を削除します。この結果を図:表からの列削除に示します。
ALTER TABLE STOCKS.発注表 DROP 仕入価格 (1) (2) (3) (4)(1) スキーマ名
(2) 表名
(3) 削除列名
(4) 変更対象表の指定
図:表からの列削除
定義済みのスキーマにビュー定義を追加する場合は、CREATE VIEW文を使用します。ビュー表の定義の変更はできません。ビュー表の定義の変更は、一度ビュー定義を削除しておいて、あらためてビュー定義を追加する方法で行います。
ビュー定義の追加例を以下に示します。CREATE VIEW文の指定方法の詳細については、“論理構造の定義”を参照してください。
例
スキーマSTOCKSに“電話”ビュー表を追加します。
CREATE VIEW STOCKS.電話(社名,電話番号) (1) (2) (3) (4) AS SELECT 会社名, 電話番号 FROM STOCKS.会社表(1) スキーマ名
(2) ビュー表名
(3) ビュー表の列名
(4) 追加対象のビュー表名
定義済みのスキーマからビュー定義を削除する場合は、DROP VIEW文を使用します。
削除対象のビュー表を参照する別のビュー表またはプロシジャルーチンの定義がある場合、当該ビュー定義を削除することはできません。あらかじめ、削除対象のビュー表を参照するビュー表およびプロシジャルーチンの定義を削除しておく必要があります。削除対象のビュー表の定義と、それを参照するビュー表およびプロシジャルーチンの定義を一緒に削除するときは、CASCADEを指定します。
ビュー定義の削除例を以下に示します。
例
ビュー表“在庫ビュー”の定義を削除します。
DROP VIEW STOCKS.在庫ビュー CASCADE (1) (2) (3) (4)(1) スキーマ名
(2) ビュー表名
(3) CASCADE指定
(4) 削除対象のビュー表名
プロシジャルーチンを追加する場合には、プロシジャルーチン定義文を使用します。プロシジャルーチン定義文の指定方法の詳細については、“論理構造の定義”を参照してください。
例
スキーマSTOCKSにPROC002を追加します。
CREATE PROCEDURE STOCKS.PROC002(IN PARAM1 INT) (1) (2) BEGIN -+ DECLARE 発注数量変数 INTEGER; | SELECT 発注数量 INTO 発注数量変数 FROM STOCKS.発注表 |→複合文 : | END -+(1) ルーチン名
(2) パラメタ宣言
プロシジャルーチンを削除する場合には、プロシジャルーチン削除文を使用します。削除対象のプロシジャルーチンを呼び出す別のプロシジャルーチンがある場合は、当該プロシジャルーチンを削除することはできません。ただし、CASCADEを指定すると、関連するプロシジャルーチンはすべて削除されます。プロシジャルーチン削除文の指定方法の詳細については、“論理構造の定義”を参照してください。
例
スキーマSTOCKSからPROC002を削除します。
DROP PROCEDURE STOCKS. PROC002 (1)(1) ルーチン名
権限情報を追加する場合には、GRANT文を使用します。
例
削除権を追加する例を以下に示します。
GRANT DELETE ON STOCKS.在庫表 TO UCHINO, WAKAO, SUZUKI (1) (2) (3)(1) 権限
(2) 対象名
(3) 権限受領者
権限情報を削除する場合には、REVOKE文を使用します。
例
削除権を削除する例を以下に示します。
REVOKE DELETE ON STOCKS.在庫表 FROM UCHINO, WAKAO, SUZUKI (1) (2) (3) |
(1) 権限
(2) 対象名
(3) 権限受領者
CASCADEを指定して権限を削除した場合、権限受領者がその権限を使って定義したビュー表およびプロシジャルーチンは、削除されます。たとえば、“SUZUKI”が会社表からビュー表“電話”を作っていたとします。
CREATE VIEW STOCKS.電話(社名,電話番号) AS SELECT 会社名, 電話番号 FROM STOCKS.会社表 |
“SUZUKI”の会社表に対するSELECT権を削除した場合、“SUZUKI”が作成したビュー表“電話”も削除されます。
REVOKE SELECT ON STOCKS.会社表 FROM SUZUKI CASCADE |
注釈定義のうち、表および列の注釈定義は、ALTER TABLE文で変更することができます。以下に例を示します。
例
表の注釈定義の変更例
ALTER TABLE STOCKS.在庫表 COMMENT '製品名, 在庫数量,格納倉庫, 販売価格の表' (1)(1) 変更する注釈定義
例
列の注釈定義の変更例
ALTER TABLE STOCKS.在庫表 MODIFY 製品番号 COMMENT '製品のコード番号' (1)(1) 変更する注釈定義
表の交換は、表名を交換することにより、DSOとの関係も交換します。表の交換を行う場合には、SWAP TABLE文を使用します。これにより、以下の効果を得ることができます。
短時間でデータを移行できます。
応用プログラムの変更は必要ありません。
ビューおよびルーチン定義は以前のものをそのまま使用できます。
表の交換の例を、以下に示します。
例
毎日のデータを本日、1日前、2日前・・・という形態で管理する場合、日が変わる契機で、本日のデータを1日前に、1日前のデータを2日前にと順番にデータを移動する運用に表の交換を使用する例を示します。新しい日のデータは初期化して使います。
SWAP TABLE 表00 表01 (1) SWAP TABLE 表00 表02 (2) : : : SWAP TABLE 表00 表29 (29) SWAP TABLE 表00 表30 (30)
目次
索引
![]() ![]() |