#CREATE VIEW

# 通用描述

CREATE VIEW用于创建一个视图对象。创建的视图可以被SELECT,但不能被INSERT/UPDAET/DELETE。

本语句可能包含对某个表的DML操作,则需要拥有对该表的相应DML权限才能成功创建视图,且同时遵循相应DML的一切约束。

# 语句定义

create view::=

syntax
CREATE OR REPLACE FORCE NO FORCE EDITIONABLE NONEDITIONABLE VIEW schema . view_name AS subquery subquery_restriction_clause

subquery_restriction_clause::=

syntax
WITH READ ONLY

# 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;