UNION ALL VIEW を定義するには
提供:DB2逆引きWiki
【DB2逆引きリファレンス目次】 【DB2逆引きリファレンス目次#実装編】 【DB2逆引きリファレンス目次#表とビュー】
目次 |
前提
- データベース接続が必要
- 以下のいずれかが必要: SYSADM権限, DBADM権限
- もしくは以下の特権のすべて:対象の表、ビューに対して照会を行う権限、スキーマに対するCREATEIN権限
解説
UNION ALL VIEWは、同じ構造の複数の表をUNION ALLを用いてひとつの表のように見せるビューの総称です。 作成するにはCREATE VIEWを用いますが、単純に作成しただけではビューに対する挿入ができません。 そこで、どの表に行を挿入すべきかDB2が判断できるようなチェック制約を各表に追加する必要があります。
手順
同じ構造の表T1,T2,T3を用いたUNION ALL VIEWの定義例です。 各表にどの行が含まれるのか(挿入できるのか)を示すためのチェック制約を各表に定義しています。
- 同じ構造を持つ表(ここではt1、t2およびt3)を定義します。
db2 ==> CREATE TABLE t1 (no INTEGER, label VARCHAR(8))↓ db2 ==> CREATE TABLE t2 LIKE t1↓ db2 ==> CREATE TABLE t3 LIKE t1↓
このようにLIKEオプションを用いると、同じ構造の表を簡単に定義できます。
- 挿入する行を判別するための制約(ここではそれぞれt1_check、t2_checkおよびt3_check)を各表に定義します。
db2 ==> ALTER TABLE t1 ADD CONSTRAINT t1_check CHECK (no BETWEEN 0 AND 49)↓ db2 ==> ALTER TABLE t2 ADD CONSTRAINT t2_check CHECK (no BETWEEN 50 AND 99)↓ db2 ==> ALTER TABLE t3 ADD CONSTRAINT t3_check CHECK (no BETWEEN 100 AND 149)↓
- UNION ALL VIEW(ここではuasamp)を定義します。
db2 ==> CREATE VIEW uasamp AS SELECT * FROM t1 UNION ALL SELECT * FROM t2 UNION ALL SELECT * FROM t3↓
- 定義したビューに対して行を挿入してみます。
db2 ==> INSERT INTO uasamp VALUES (80, 'TEST')↓
行をどの表に挿入すべきかは、先ほど定義した制約に基づいて決定されます。 この例では表T2に対して挿入が行われます。