説明
このステートメントは、ビューを作成するために使用されます。
制限事項と注意点
OR REPLACE 句が指定されている場合、このステートメントは既存のビューを置き換えることができます。
ビューはデータベース内に実際にはテーブルとして存在するわけではなく、CREATE VIEW ステートメントで指定された SELECT ステートメントの結果として派生されます。ビューは使用するたびに再生成されます。
FROM 句で2つ以上のテーブルまたはビューが参照されている場合、そのビューは結合ビュー(Join View)と呼ばれます。更新可能な結合ビュー、または変更可能な結合ビューとは、2つ以上の基底テーブルまたはビューに関連し、DML操作を許可するものです。更新可能なビューは WITH READ ONLY 句の制限を受けません。
更新可能性を実現するためには、ビューが複数の条件を満たす必要があります。例えば、一般的なルールの一つとして、結合ビューに対する INSERT、UPDATE、または DELETE 操作では一度に1つの基底テーブルしか変更できないということが挙げられます。
権限要件
CREATE VIEW ステートメントを実行するには、現在のユーザーが CREATE VIEW 権限を持っている必要があります。OceanBaseデータベースの権限の詳細については、Oracleモードの権限分類を参照してください。
構文
CREATE [OR REPLACE] [[NO] FORCE] VIEW view_name [(column_name_list)] AS select_stmt view_with_opt;
select_stmt:
SELECT column_name, [--string]
[, column_name, [--string] ...]
FROM from_list
[WHERE condition]
column_name_list:
column_name [, column_name ...]
view_with_opt:
WITH READ ONLY
| WITH CHECK OPTION
| empty
パラメータの説明
| パラメータ | 説明 |
|---|---|
| OR REPLACE | 作成しようとするビューの名前が既に存在する場合、新しい定義を使用してビューを再作成することを示します。 |
| [NO] FORCE | ビューを作成する際に、そのビューに基表が存在するかどうか、参照されるオブジェクトのタイプ、およびビューが属するスキーマの所有者が権限を持っているかどうかを考慮しない場合は、FORCE を指定してください。基表が存在し、かつビューが属するスキーマの所有者が権限を持つ場合にのみビューを作成する場合は、NOFORCE を指定してください。NOFORCE がデフォルト設定です。 |
| view_name | ビュー名。 |
| column_name_list | ビューは基表と同様に、重複なく一意の列名を持たなければなりません。デフォルトでは、SELECT ステートメントで取得される列名がビューの列名として使用されます。ビューの列に明確な名前を定義するには、オプションの column_name_list 句を使用し、ID同士をカンマで区切ります。column_name_list の名前の数は、SELECT ステートメントで取得される列数と等しくなければなりません。SELECT ステートメントで取得される列は、テーブル列への単純な参照である場合もあります。関数、定数値、演算子などを使用した式である場合もあります。 |
| select_stmt | SELECT ステートメントの一種です。これによりビューの定義が与えられます。このステートメントは、基表または他のビューから選択を行うことができます。詳細な SELECT ステートメントの情報については、SIMPLE SELECTを参照してください。 |
| --string | オプションで、ビューにコメントを追加するために使用されます。コメントはビュー定義に保存されます。
説明
|
| view_with_opt | WITH READ ONLY は、ビューを作成または置き換える際のオプションであり、ビューを読み取り専用として使用し、挿入、更新、削除の操作には使用できないように指定します。 WITH CHECK OPTION は、ビューを作成するための構文であり、挿入または更新されるデータがビューの定義条件を満たすことを保証するために使用されます。
注意Oracleモードの |
例
テーブル
tbl1のcol1とcol2列を選択して、ビューview1を作成します。-- テーブル tbl1の作成 obclient> CREATE TABLE tbl1 (col1 INT, col2 VARCHAR(50)); Query OK, 0 rows affected -- テーブルtbl1にデータの挿入 obclient> INSERT INTO tbl1 (col1, col2) VALUES (1, 'a'), (2, 'b'), (3, 'c'); Query OK, 3 rows affected (0.046 sec) Records: 3 Duplicates: 0 Warnings: 0 obclient> CREATE OR REPLACE FORCE VIEW view1(vcol1, vcol2) AS SELECT col1, col2 FROM tbl1; Query OK, 0 rows affectedテーブル
tbl2のcol1とcol2列に基づいてビューview2を作成し、view2にはtbl2.col2 > 1を満たすすべてのデータが含まれます。-- テーブルtbl2の作成 obclient> CREATE TABLE tbl2 (a INT, b INT); Query OK, 0 rows affected -- テーブルtbl2にデータの挿入 obclient> INSERT INTO tbl2 (a, b) VALUES (23, 2), (76, 9), (456, 1); Query OK, 3 rows affected (0.046 sec) obclient> CREATE VIEW view2 AS SELECT * FROM tbl2 WHERE tbl2.b > 1 WITH CHECK OPTION; Query OK, 0 rows affected (0.064 sec)テーブル
tbl2のcol1とcol2列に基づいてビューview3を作成し、同時にビューview3にコメントを追加します。obclient [SYS]> CREATE VIEW view3 AS SELECT col1, --col1 comment1 col2 --col1 comment2 FROM tbl2;SHOW CREATE VIEWまたはDBMS_METADATA.GET_DDLを使用してビューのコメントを照会します。SHOW CREATE VIEWを使用してビューのコメントを照会します。obclient [SYS]> SHOW CREATE VIEW view3;実行結果は次のとおりです:
+-------+--------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ | VIEW | CREATE VIEW | CHARACTER_SET_CLIENT | COLLATION_CONNECTION | +-------+--------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ | VIEW3 | CREATE VIEW "VIEW3" ("COL1", "COL2") AS SELECT col1, --col1 comment1 col2 --col1 comment2 FROM tbl2 | utf8mb4 | utf8mb4_bin | +-------+--------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ 1 row in setDBMS_METADATA.GET_DDLを使用してビューのコメントを照会します。obclient [SYS]> SELECT DBMS_METADATA.GET_DDL('VIEW', 'VIEW3', 'SYS') FROM dual;実行結果は次のとおりです:
+--------------------------------------------------------------------------------------------------------------+ | DBMS_METADATA.GET_DDL('VIEW','VIEW3','SYS') | +--------------------------------------------------------------------------------------------------------------+ | CREATE VIEW "VIEW3" ("COL1", "COL2") AS SELECT col1, --col1 comment1 col2 --col1 comment2 FROM tbl2 | +--------------------------------------------------------------------------------------------------------------+ 1 row in set