#CREATE VIEW
# 通用描述
CREATE VIEW用于创建一个视图对象。创建的视图可以被SELECT,但不能被INSERT/UPDAET/DELETE。
本语句可能包含对某个表的DML操作,则需要拥有对该表的相应DML权限才能成功创建视图,且同时遵循相应DML的一切约束。
# 语句定义
create view::=
subquery_restriction_clause::=
# or replace
该语句用于指定当要创建的视图已经存在时,将其进行重建。
# force|no force
指定FORCE表示强行创建视图。默认为NO FORCE,表示条件不满足时返回报错,而不是强行创建视图。
当视图依赖的子查询内对象不存在,或者视图的owner对子查询内依赖的对象无访问权限时,指定FORCE可以强行创建视图,但实际使用该视图可能会报错。
使用FORCE的好处是,在所依赖对象被创建,并且视图owner有依赖对象的访问权限后,无需重新创建即可以成功查询该视图。
分布式部署中均默认为NO FORCE,用户不能进行指定。
示例
CREATE FORCE VIEW v_table_not_exsits AS SELECT * FROM table_not_exsits;
# editionable | noneditionable
用于语法兼容,无实际含义。
# view_name
该语句用于指定要创建的视图的名称,不可省略,且需符合YashanDB的对象命名规范。
# as subquery
该语句用于指定创建视图的子查询语句,子查询规则同SELECT语句中描述。其中,子查询的列项不能指定为某个序列号。
如在子查询中包含了对某个表的SELECT *操作时:
- 创建的视图将该表的所有列字段作为自己的列字段。
- 如该表增加了新的列字段,则本视图不会体现该变化,仍只包含原来的列字段项。
- 如该表删除了某个列字段,则本视图对象失效,无法使用,直到该列字段被重新增加。
- 如该表更名了某个列字段,则本视图对象失效,无法使用,直到该列字段被改回原来的名称。
示例
CREATE VIEW v_area AS SELECT * FROM area;
# with read only
指定该语句表示所创建的视图只读,即不能更改视图中的数据,YashanDB默认即为此模式。
示例
CREATE VIEW v_area AS SELECT * FROM area WITH READ ONLY;