Oracle视图 create View

视图是一种虚表,使用CREATE VIEW语句来定义视图,该视图是基于一个或多个表或视图的逻辑表。一个视图本身不包含任何数据, 视图所基于的表称为基表。

视图就相当于一条select 语句,定义了一个视图就是定义了一个sql语句, 视图不占空间,使用视图不会提高性能,但是能简化sql语句 。

创建视图:
create view 视图名;

如:

create or replace view  v_test  as select * from test where age=10;
create or replace: 如果view存在就覆盖,不存在才创建。

删除视图: 

drop view 视图名;

权限控制:

要在您自己的模式中创建视图,您必须具有CREATE VIEW系统特权。
要在其他用户的模式中创建视图,您必须具有CREATE ANY VIEW系统特权。
包含该视图的模式的所有者必须具有从视图所基于的所有表或视图中选择,插入,更新或删除行所必需的权限。

详细语句解析:

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY [CONSTRAINT constraint]];

其中:

with read only视图只读约束

with check option 不允许插入与where条件不符的记录,类似于check约束的功能.

通过视图修改数据:

CREATE VIEW clerk AS SELECT employee_id, last_name, department_id, job_id FROM employees

WHERE job_id = ‘PU_CLERK‘ or job_id = ‘SH_CLERK‘ or job_id = ‘ST_CLERK‘;

使用视图修改基表的数据,只有员工的ID,姓氏,部门号码和职位在该视图中可见,并且这些列只能在雇员是职员的行中更新:

UPDATE clerk SET job_id = ‘PU_MAN‘ WHERE employee_id = 118;

有限制的修改:

连接视图是其视图子查询包含连接的视图。如果联接中至少有一列具有唯一索引,则可以在联接视图中修改一个基表。

CREATE VIEW locations_view AS

SELECT d.department_id, d.department_name, l.location_id, l.city

FROM departments d, locations l WHERE d.location_id = l.location_id;

新增记录  INSERT INTO locations_view VALUES(999, ‘Entertainment‘, 87, ‘Roma‘); 

系统返回:ERROR at line 1:

ORA-01776: cannot modify more than one base table through a join view

可以查询系统表USER_UPDATABLE_COLUMNS,查看连接视图中的列是否可更新。

SELECT column_name, updatable  FROM user_updatable_columns

WHERE table_name = ‘LOCATIONS_VIEW‘    ORDER BY column_name, updatable;

改成如下语句,操作成功

INSERT INTO locations_view (department_id, department_name) VALUES (999, ‘Entertainment‘);

1 row created.

参考文献

oracle官网的Oracle11G-en-US.pdf

时间: 2024-09-27 16:32:31

Oracle视图 create View的相关文章

Oracle:视图(view)

视图的概念:从表中抽取出逻辑上相关的数据集合 视图相关概念: 1.视图是一种续表 2.视图建立在已有表的基础上,视图赖以建立的这些表称为基表 3.向视图提供数据内容的语句为SELECT语句,可以将视图理解为存储起来的SELECT语句 视图的作用: 1.控制数据访问 2.简化查询 3.避免重复访问相同的数据 理解:将经常重复访问的数据(对应到表中某些字段(可以是多表连接查询后的结果))新建成视图,可以大大的简化查询. 简单视图和复杂视图:复杂视图中有函数和分组(相当于形成了新表,于基表没有关系)

数据库如何创建视图create view

数据库如何创建视图     创建视图的理想步骤: 一般来说,视图创建可以分为五步走: 第一步:先考虑select语句的编写.我们知道,视图其实就是一个select语句的集合,所以,我们建立视图的第一步,就是考虑这个select语句 的如何编写.这个select语句编写的是否合理,执行效率的高低直接影响着这个视图的性能,在Select语句中,可能还会有格式的控制.内容的编排等 等.如在Select语句中,可以把一些字段合并成一个字段;也可以把相关的内容进行倒置等等.这些功能都是Select语句完成

Oracle 视图

一:概念 视图是基于一张表或多张表或另外一个视图的逻辑表.视图不同于表,视图本身不包含任何数据.表是实际独立存在的实体,是用于存储数据的基本结构.而视图只是一种定义,对应一个查询语句.视图的数据都来自于某些表,这些表被称为基表.数据库中只在数据字典中存储对视图的定义. 二:优点 1.为用户集中数据,简化用户的数据查询和处理. 2.屏蔽数据库的复杂性,用户不必了解数据库的复杂性. 3.简化用户权限的管理,只授予用户使用视图的权限. 4.可以提高数据访问的安全性,通过视图往往只可以访问数据库中表的特

二十八、oracle 视图

一.介绍视图是一张虚拟表,其内容由查询定义,同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成.(视图不是真实存在磁盘上的) 二.视图与表的区别1.表需要占用磁盘空间,视图不需要2.视图不能添加索引(所以查询速度略微慢点)3.使用视图可以简化,复杂查询4.视图的使用利于提高安全性比如:不同用户查看不同视图 三.创建/修改视图1.创建视图create view 视图名 as sel

Oracle 视图操作

-- 创建视图create view V_TEST asselect * from T_TEST where rownum <100 select * from V_TEST-- 新建视图用户 view_01 并赋予select_catalog_role角色 和 该视图的select权限 ,在system privilege中需要create session权限用于登录-- 登录 view_01 用户 并查询ht用户的视图(要跟上用户名,否则报表或视图不存在的错误)select * from U

oracle视图与索引

实验目的:    1.理解索引和位图索引的基本概念    2.掌握索引和位图索引的创建方法,并使用索引对查询过程产生的影响进行分析    3.理解视图的基本概念    4.掌握视图的创建方法,并对视图中数据查询与更新进行操作,明确其使用的注意事项. 实验步骤: 1.创建有特点的大数据表.为了保证索引产生前后,查询效果的正确比对,应建立一个存在大量数据的测试表.这个测试表的数据来源于SYS模式下的all_objects视图,其中包括本数据库实例中的全部对象的基本描述,具体包括对象的所有者.对象名称

Oracle - 视图相关

-- 特点 -- 保护真实表, 隐藏重要字段的数据, 保护数据 -- 在视图中的操作会映射执行到真实表中 -- 可以手动开启只读模式, 使用关键字 with read only -- 视图的创建, 用户必须拥有dba权限 -- 创建视图 -- create view 视图名 as select 对外提供的内容 from 真实表名 -- 创建视图 (开启只读模式) -- create view 视图名 as select 对外提供的内容 from 真实表名 with read only -- 删除

解决Oracle在scott用户下创建视图(VIEW)权限不足的方法

问题描述:在scott用户下创建视图的时候,报错:权限不足.(其他用户以此类推)解决方法: 以dba用户登录 [sql] view plain copy print? sqlplus / as sysdba 赋予scott用户创建VIEW的权限 [sql] view plain copy print? grant create view to scott 以scott用户登录oracle [sql] view plain copy print? conn scott/tiger 创建视图成功 [

SQL Server 视图的创建- (create view必须是批处理中仅有的语句)

当我们SQL Server在创建视图时 ,会出现"create view 必须是批处理中仅有的语句"这个语法错误提示 ,实际上这本身没什么错! 因为create view 必须是批处理中的第一条语句.也就是说,你可能在这段代码之前还有其他的语句是同时处理的,为此,你可以在这段代码的前一行加上GO,在这段代码结束后一行加上GO就可以了..或者你把这段代码单独执行就不会出错了.