首批通过分布式安全可靠测评,为关键业务系统打造
管理视图
更新时间:2026-07-15 20:56:58
本节主要介绍如何创建、修改和删除视图。
视图用来展示表的查询结果。大部分能使用表的地方,都可以使用视图。如果经常访问的数据分布在多个表里时,使用视图是最好的方法。
创建普通视图
您可以使用 CREATE VIEW 语句来创建普通视图。创建后,可以对该视图执行 DML 语句。
Oracle 模式下,创建视图的 SQL 语法如下:
CREATE [OR REPLACE] [[NO] FORCE] VIEW view_name [(column_name_list)]
AS select_stmt
[view_check_option];
column_name_list:
column_name [, column_name ...]
view_check_option:
WITH READ ONLY
| WITH CHECK OPTION
其中:
OR REPLACE:表示如果要创建的视图名称已存在,则使用新的定义重新创建视图。[NO] FORCE:如果创建视图时,不希望考虑该视图是否存在基表或存在引用的对象类型,以及视图所在 Schema 的所有者是否具有权限时,则需要指定FORCE。如果已确认基表存在且视图所在 Schema 的所有者具有权限,则可以指定
NO FORCE。默认为NO FORCE。column_name_list:与基表一样,视图必须具有唯一的列名,不能重复。缺省情况下,由SELECT语句检索的列名将用作视图列名。如果想为视图列定义明确的名称,可使用可选的
column_name_list子句,ID 之间使用逗号分隔。column_name_list中的名称数目必须等于SELECT语句检索的列数。SELECT语句检索的列可以是对表列的简单引用。也可以是使用函数、常量值、运算符等的表达式。select_stmt:定义视图的SELECT语句,该语句中的信息可以从基表或其他视图中选取。WITH READ ONLY:是在创建或替换视图时的一个选项,用于指定该视图只能用于读取数据,而不能用于 DML 操作(INSERT、UPDATE、DELETE),即禁止通过视图进行插入、更新或删除操作。WITH CHECK OPTION:是一种用于创建视图的语法,它用于确保插入或更新的数据满足视图的定义条件。即允许通过视图进行 DML 操作,但要求操作后的数据必须满足视图的定义条件。说明
Oracle 模式下的
WITH CHECK OPTION语法不支持指定为LOCAL或CASCADED,默认为CASCADED。对于 V4.2.5 版本,从 V4.2.5 BP7 版本开始支持视图过滤条件(
where_clause)包含子查询时指定WITH CHECK OPTION子句。注意
当过滤条件中使用
WITH CHECK OPTION子句时,视图定义中暂不支持使用JOIN操作。
示例如下:
选择表 tbl1 中的 col1、col2 列来创建视图 view1。
obclient> CREATE OR REPLACE FORCE VIEW view1(vcol1, vcol2)
AS SELECT col1, col2
FROM tbl1;
修改普通视图
您可以使用 CREATE OR REPLACE VIEW 语句来对普通视图进行修改。
示例如下:
修改视图 stock_item。
obclient> CREATE OR REPLACE VIEW stock_item
AS SELECT /*+ leading(s) use_merge(i) */
i_price,
i_name,
i_data,
s_i_id,
s_w_id,
s_order_cnt,
s_ytd,
s_remote_cnt,
s_quantity,
s_data,
s_dist_01,
s_dist_02,
s_dist_03,
s_dist_04,
s_dist_05,
s_dist_06,
s_dist_07,
s_dist_08,
s_dist_09,
s_dist_10
FROM stok s, item i
WHERE s.s_i_id = i.i_id;
删除视图
您可以使用 DROP VIEW 语句删除一个或多个视图,删除视图并不会删除视图所引用的表。
如果当前视图被其他视图所引用,则被依赖视图删除后将会导致依赖当前视图的其他视图的查询失败。
删除视图时,需确保当前用户具备该视图的 DROP 权限。
Oracle 模式下,删除视图的 SQL 语法如下:
DROP VIEW view_name;
示例如下:
删除视图 v1。
obclient> DROP VIEW v1;