OracleDatabase SQL VIEW、順序について

f:id:monozukuri-bu:20190827194855j:plain

みちです。
Oracle DatabaseのVIEWと順序の作成・削除についての勉強していきたいと思います。

VIEW

 表や他のVIEWをもとに作成されるオブジェクトです。VIEWはデータを持っていません。
VIEWのもととなる表を「実表」、VIEWを「仮想表」といいます。

VIEWの種類

単一VIEW

 一つの表から構成され、関数やGROUP BY句を含まないVIEWのことです。
VIEWから実表の操作をすることが可能です。(条件による)

複合VIEW

 二つ以上の表から構成されているVIEWもしくは、1つの表から構成され関数やGROUP BY句を含むVIEWのことです。
VIEWから実表の操作をすることは特定の条件を満たす場合可能です。

VIEWの作成

 CREATE VIEW権限を持っていればVIEWの作成が可能となります。

CREATE [OR REPLACE] [FORCE | NOFORCE] VIEW VIEW名[(別名 [,別名 …])]
AS
副問合せ
[WITH CHECK OPTION [CONSTRAINT 制約名]]
[WITH READ ONLY [CONSTRAINT 制約名]];

CREATE VIEW文のオプション

OR REPLACE

 同名のVIEWが存在した場合そのVIEWに上書きします。
同名のVIEWが存在しているのにも関わらずOR REPLACEを省略するとエラーとなります。
同名のVIEWが存在しない場合新たにVIEWが作成されます。

FORCE

 実表が存在しない場合エラーとなるがVIEWは強制的に作成されます。

NOFORCE

 実表がある場合VIEWが作成されます。実表が存在しない場合はエラーとなります。

WITH CHECK OPTION

 VIEWを通じてアクセスできる行のみ追加、更新できます。

WITH READ ONLY

 VIEWが読み取り専用となります。そのためデータの追加、更新、削除が出来なくなります。

VIEWの削除

DROP ANY VIEW権限を持つユーザーがVIEWを削除することが出来ます。

DROP VIEW VIEW名;

VIEWを使用したデータの変更

データの削除の場合(DELETE)

 GROUP BY句、ROWNUM疑似列、グループ関数、DISTINCTキーワードの要素が含まれていない場合削除することが出来ます。

データの更新の場合(UPDATE)

 GROUP BY句、ROWNUM疑似列、グループ関数、DISTINCTキーワード、式によって定義された列が要素が含まれていない場合変更することが出来ます。
副問合せのSELECT句で計算式や関数を使用している場合、列別名を指定する必要があります。

データの追加(INSERT INTO)

 GROUP BY句、ROWNUM疑似列、グループ関数、DISTINCTキーワード、式によって定義された列、VIEWに含まれていない実表の列にNOT NULL制約が定義されている要素が含まれていない場合変更することが出来ます。

順序の作成・削除

順序の作成

 順序は一意な番号を自動で生成するオブジェクトです。
CREATE SEQUENCE権限を持つことでCREATE SEQUENCEを使用することが出来ます。

INCREMENT BY

 デフォルト値は1です。指定した数だけ増幅します。

START WITH

 デフォルト値は1です。初期値を設定することが出来ます。

MAXVALUE / NOMAXVALUE

 最大値を設定することが出来ます。デフォルトはNOMAXVALUEです。

MINVALUE / NOMINVALUE

 最小値を設定することが出来ます。デフォルトはNOMINVALUEです。

CYCLE / NOCYCLE

 順序値が最大値または最小値に達した場合、初期値に戻り繰り返し順序値を生成します。
デフォルトはNO CYCLEです。

CASHE / NOCASHE

 指定された数順序値をメモリに割り当てます。デフォルト値は20です。

順序の使用方法

 主問い合わせのSELECT句のリスト、INSERTの副問合せのSELECT句のリスト、INSERTのVALUES句、UPDATEのSET句で参照することが出来ます。

NEXTVAL疑似列

 新しい順序値が戻されます。

CURRVAL疑似列

 最後に取得された順序値が戻されます。

順序値の欠番の発生

ロールバックが発生した場合、順序が複数の表で指定されていると、システムがクラッシュした場合に欠番が発生することがあります。

順序の定義の削除

DROP SEQUENCEを使うことによって順序の削除をすることが出来ます。
DROP ANY SEQUENCE権限をもつユーザーは削除を行うことが出来ます。

DROP SEQUENCE 順序名;

順序の定義の変更

 ALTER SEQUENCEを使うことによって順序の定義を変更することが出来ます。
START WITH以外のオプションを指定することが出来ます。
初期値を指定する場合は順序を削除してから再度作成する必要があります。

まとめ

 今回はVIEWの作成と順序について勉強しました。