ビュー(view)とは
ビューは、テーブルから作成される仮想的なテーブルです。ビューの中にはデータがありません。データが格納された実テーブルをどのように参照するのかを定義したものがビューになります。
この記事では、以下のテスト用のテーブル(table01)のビューを作成してみます。
翔泳社
売り上げランキング: 67,212
ビュー(view)を作成する
Oracleでビューを作成するには、以下のクエリを使います。
CREATE VIEW ビューの名前 AS ビューを作成する条件; CREATE VIEW table01_view AS SELECT * FROM table01;
SQL> CREATE VIEW table01_view AS SELECT * FROM table01; CREATE VIEW table01_view AS SELECT * FROM table01 * 行1でエラーが発生しました。: ORA-01031: 権限が不足しています。
ORA-01031のエラーになった場合は、sysdbaの権限でCREATE VIEWのシステム権限を付与してあげます。
GRANT CREATE VIEW to hoge;
権限を付与しなおして、再度ビューを作成します。
SQL> CREATE VIEW table01_view AS SELECT * FROM table01; ビューが作成されました。
今度は、うまくいきました。
ビューを参照する
ビューの参照はテーブルと同じように参照することができます。
select * from table01_view;
descコマンドの結果も同じですね。
ビューのメリット
- 複雑なクエリの再利用
- 実テーブルに対するアクセス制御
ビューにアクセスすると、定義されたクエリが実行され、実テーブルから必要なデータが抽出されます。あらかじめ毎回入力するのが面倒な複雑なクエリを一度ビューとして定義しておけば、ユーザやプログラムは単純なクエリを実行するだけですみます。
このような開発労力の軽減という観点以外に、セキュリティについてもメリットもあります。見せたくないデータを除いたビューを定義することにより、一般ユーザでも実テーブルのデータを利用できるようになります。
[SQL] 9. ビュー 1 | TECHSCORE(テックスコア)
ビューは更新できる
ビューに対して更新を行うと、実体のテーブルの方にも変更が反映されます。
delete from table01_view where id = '00000001'; >1行が削除されました。
エイリアスみたいですね。
ビューを経由した実テーブルの更新はNG
NGと書きましたが、できないことはないが、やらないほうが良いという意味です。
ぱっと見、実テーブルを更新しているように見えないのでわかりにくいです。複数のテーブルを参照するビューに対する更新を許可した場合、実テーブルがどのように更新されるか見えにくくなります。
更新禁止のビュー
更新禁止のビューというのも作成できます。以下の例では、table01_viewを作成する際、WITH READ ONLYを指定して読み取り専用にしています。
CREATE OR REPLACE VIEW table01_view AS SELECT * FROM table01 WITH READ ONLY;
ビューのアクセス制御は、権限側でコントロールするのが良いという意見もあります。
WITH READ ONLY も、SQLインターフェイスのユーザに対する更新のリスクを無くす為であると思われます。アプリケーションであれば、VIEW に対して更新コードさえ書かなければ(そういう仕様がなければ)必要ありません。本来は、「権限」でコントロールすべきものでしょう。
ビューの功罪
読み取り専用のビューに対して更新をかけると、ORA-42399となります。
ORA-42399: 読取り専用ビューではDML操作を実行できません
ビューの削除
ビューの削除は、drop viewで削除します。
DROP VIEW ビューの名前 DROP VIEW table01_view;