半夏微凉

半夏微凉

八、视图——数据库中虚拟的表

视图是一个虚拟的表,视图本身不包含任何数据。

1.视图的语法

CREATE [OR REPLACE] VIEW view_name [(column_name1[,column_name2…

  AS

  select_statement

  [WITH CHECK OPTION] ---数据库增加或修改数据时必须满足子查询的条件

  [WITH READ ONLY]----创建可读视图,不允许修改

2.视图创建

(创建视图需要create view系统权限,可以使用sysdba用户给当前登陆用户赋予该权限:grant create any view to user_name)

2.1单表视图创建

    CREATE OR REPLACE VIEW v_avg AS 

        SELECT name 水果名称,shuliang 数据,jiage 价格 FROM t_avg  

        WHERE type='01';

2.2多表视图创建

    CREATE OR REPLACE VIEW v_t AS

        SELECT a.name 水果名称,a.shuliang 数据,a.jiage 价格,b.typename FROM t_a a,t_b b  

        WHERE a.type='01'

        AND a.type=b.typeid;

2.3创建视图的视图

    CREATE OR REPLACE VIEW v_t_1 AS 

         SELECT t.水果名称,t.typename 类型 FROM v_t t;

2.4创建没有源表的视图

    CREATE OR REPLACE FORCE VIEW v_notable AS SELECT t.水果名称,t.typename 类型 FROM notable t;

2.5创建带约束的视图

    CREATE OR REPLACE VIEW constraint_name 

        (

         column1 CONSTRAINT constraint_name UNIQUE RELY DISABLE NOVALIDATE, ----表示约束对此前和此后的数据都不进行检查。

         column2,

         column3 CONSTRAINT constraint_name PRIMARY KEY (column4) RELY DISABLE NOVALIDATE

        )

        AS select_statement

3.视图修改

3.1视图结构修改

ALTER VIEW view_name ADD CONSTRAINT constraint_name unique (column) DISABLE NOVALIDATE;

3.2视图约束修改

ALTER VIEW DROP CONSTRAINT constraint_name;

4.视图删除

    DROP VIEW view_name[CASCADE CONSTRAINTS];  -----CASCADE CONSTRAINTS表示删除视图时删除约束。

-----------------

ORA-01732: 此视图的数据操纵操作非法

有限制的,详细参考concepts

而可更新的连接视图(updatable join view )是指能够执行 UPDATE,

INSERT,和 DELETE 操作的连接视图(join view)。

ALL_UPDATABLE_COLUMNS,DBA_UPDATABLE_COLUMNS,及

USER_UPDATABLE_COLUMNS 数据字典视图(data dictionary view)中的信

息描述了视图中那些列是可更新的。为了保证视图是可更新的,其定义中不

能包含以下语法结构(construct):

● 集合操作符(set operator)

● DISTINCT 操作符

● 聚合函数(aggregate function)或分析型函数(analytic function)

● GROUP BY,ORDER BY,CONNECT BY,或 START WITH 字句

● 在 SELECT 之后的列表中使用collection expression

● 在 SELECT 之后的列表中使用子查询(subquery)

● 连接(join)(但是有例外情况)


评论回复


·