Oracle 视图

一:概念

视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表,视图本身不包含任何数据。表是实际独立存在的实体,是用于存储数据的基本结构。而视图只是一种定义,对应一个查询语句。视图的数据都来自于某些表,这些表被称为基表。数据库中只在数据字典中存储对视图的定义。

二:优点

1、为用户集中数据,简化用户的数据查询和处理。

2、屏蔽数据库的复杂性,用户不必了解数据库的复杂性。

3、简化用户权限的管理,只授予用户使用视图的权限。

4、可以提高数据访问的安全性,通过视图往往只可以访问数据库中表的特定部分,限制了用户访问表的全部行和列。

5、便于数据共享,多个用户不必都定义所需的数据。

三:视图类别

1、简单视图

指基于单个表并且不包含函数或表达式的视图,在该视图上可以执行DML语句(即可执行增、删、改操作)。

2、复杂视图

指基于单个或者多个表或者包含函数、表达式或者分组数据的视图,在该视图上执行DML语句时必须要符合特定条件。注意:在定义复杂视图时必须为函数或表达式定义别名

3、连接视图

指基于多个表建立的视图,一般来说不会在该视图上执行INSERT、UPDATE、DELETE操作。

4、只读视图

指只允许进行SELECT操作的视图,在该视图时指定WITH READ ONLY选项。该视图上不能执行INSERT、UPDATE、DELETE操作。

5、check约束视图

WITH CHECK OPTION用于在视图上定义CHECK约束,即在该视图上执行INSERT或UPDATE操作时,数据必须符合查询结果.

2、参数说明

?


1

2

3

CREATE OR Repalce:用于创建和修改视图

WITH CHECK OPTION :用于创建限制数据访问的视图

WITH READ ONLY :用于创建只读视图

3、DML操作遵循的原则

a)简单视图可以执行DML操作。

b)在视图出现下列情况时不可以通过视图修改基表数据或插入数据:

i、集合运算符(union,intersect,minus)

ii、DISTINCT关键字

iii、GROUP BY,ORDER BY,CONNECT BY或START WITH子句

v、子查询

vi、分组函数

vii、需要更新的列不是由“列表达式”定义的

vx、基表中所有NOT NULL列均属于该视图

五:如何查询视图和表的更新权限


1

2

select table_name,column_name,updatable,insertable,deletable

from user_updatable_columns; 

说明

updatable 表示当前字段是否可以执行修改操作

insertable 表示当前字段是否可以执行添加操作

deletable 表示当前字段是否可以执行删除操作

六:示例

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

--对简单视图的操作

drop table emp1;

create table emp1 as select * from emp;

--简单视图

create or replace view v_emp1

as

select * from emp1 ;

--查询

select * from v_emp1;

--更新

update v_emp1 set v_emp1.ENAME=‘andy‘ where v_emp1.JOB=‘CLERK‘;

--增加

insert into v_emp1 values (7777, ‘chy‘, ‘MANAGER‘, 8888, sysdate, 10000,1111.11,20);

--删除

delete from v_emp1 where v_emp1.EMPNO=7777;

--复杂视图、仅两基表相连、不包含各种分组函数、group by、distinct命令等。

create or replace view v_complex

as

select emp1.ename, emp1.job, dept.dname from emp1, dept where emp1.deptno=dept.deptno

with check option ;

--查询

select * from v_complex;

--修改

update v_complex set v_complex.ename=‘andy‘ where v_complex.job=‘MANAGER‘;

--增加

--报错:ORA-01776:无法通过连接视图修改多个基表

insert into v_complex (v_complex.ename, v_complex.job, v_complex.dname) values (‘chy‘, ‘MANAGER‘, ‘SALES‘);

--删除

delete from v_complex where v_complex.ename=‘chy‘;

--复杂视图、包含不能进行DML的元素、一般仅用与查询、可以加上 with read only;

create or replace view v_complex_readonly

as

--对使用聚合函数的列必须使用别名!

select max(emp1.sal) max_sal from emp1, dept where emp1.deptno=dept.deptno group by dept.deptno

with read only;

--查询

select * from v_complex_readonly;

--删除视图

create or replace view v_for_delete

as

select * from emp

with read only;

drop view v_for_delete;

实例:

select * from student

--创建视图
create view V_student as select sname, sclass from student

--修改视图
create or replace view v_student as select son,sname, sclass from student

select * from v_student;

--对视图进行操作就和对普通表进行操作是一样的了。
update v_student set sname=‘花荣‘ where son=112;

--变成只读视图

create view v_student2 as select sname from student with read only

create or replace view v_student2 as select son,sname from student with read only

update v_student2 set sname=‘花荣‘ where son=112
时间: 2024-10-18 20:20:43

Oracle 视图的相关文章

Oracle视图详解

转载自:http://blog.itpub.net/29785807/viewspace-1270120/ 一. 视图的定义 视图(view),也称虚表, 不占用物理空间,这个也是相对概念,因为视图本身的定义语句还是要存储在数据字典里的.视图只有逻辑定义.每次使用的时候,只是重新执行SQL. 视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中.那些用于产生视图的表叫做该视图的基表.一个视图也可以从另一个视图中产生. 视图的定义存在数据库中,与此定义相关的数据并没有再存一份于数据库中.通

oracle视图建主键

一个项目要求视图建主键,下面是一个例子 CREATE or replace VIEW SME_V_A....  (AGENTID,AGENTNAME,BUSYNUM,RESTNUM,RESTTIME,DEVICENONUM,DEVICENOSUM ,CONSTRAINT AGENTSTATIC_PK PRIMARY KEY (AGENTID) RELY DISABLE NOVALIDATE) AS SELECT A.AGENTID as AGENTID, ---座席编号 (SELECT B.OP

ORACLE视图添加备注

ORACLE视图添加备注 版权声明:本文为博主原创文章,未经博主允许不得转载. create or replace view oes_material_series_ref as select t.productgroup, o.idnrk materialcode, t.seriescode   from oes_park_priority t  inner join oms_hm_mtl_general_view v     on t.materialcode = v.material_co

Oracle 视图简单介绍

Oracle视图的种类 关系视图 关系视图:Oracle视图是作为数据库对象存在的,因此,创建之后也可以通过工具或数据字典来查看视图的相关信息.这是大家常用的视图 如:create view 视图名称 as 查询语句|关系运算 http://blog.csdn.net/tianlesoftware/article/details/5530618 内嵌视图 内嵌视图:在from语句中的可以把表改成一个子查询,如:select a.id ,b.id from emp a,(select id fro

Oracle:视图(view)

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

简述oracle视图

1.视图的概述 视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据.视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表.视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器.(Oracle支持在视图上显式的定义触发器和定义一些逻辑约束) 2.视图的存储 与表不同,视图不会要求分配存储空间,视图中也不会包含实际的数据.视图只是定义了一个查询,视图中的数据是从基表中获取

oracle 视图的创建,游标,left join

视图的创建: create or replace view dmv_mat_contract_stock_in_bill as select csib.*, sib.STOCK_IO_, sib.CONFIRM_DATE_ from DM_MAT_CONTRACT_STOCK_IN_BILL csib left outer join DM_MAT_STOCK_IO_BILL sib on csib.BILL_CODE_ = sib.BILL_CODE_; Oracle 游标使用:http://w

Oracle 视图view

在我看来,oracle的视图就是用于将多个表的关联查询结果映射成[临时表],视图与系统表中的数据是实时对应的. 我们可以像操作表的查询一样来操作视图查询. 视图写法: CREATE OR REPLACE FORCE VIEW V_TEM ( ID, NAME ) AS SELECT ID,NAME FROM TABLE 项目中的一个案例,将一个自关联的结构表(行转多列)体现组织结构:市-区县-网格-乡镇-渠道 用到的知识点: 1.SYS_CONNECT_BY_PATH(字段,间隔符)    示例

Windows之Xmanager连接linux打开Oracle视图操作

前提:安装Xmanager 能够百度Xmanager下载其破解版或者带注冊机的版本号,也能够官网下载.只是须要秘钥(建议下载企业版) 官网下载地址:http://www.netsarang.com/download/down_xme.html 使用(以RedHat 5.8为例): 一:Xstart 打开Xstart,新建须要远程的Linux的会话 1)新建:输入新建远程会话名称 2)主机:远程Linux的IP 3)协议:此处使用SSH协议 4)username:Linuxserver的用户登录名

oracle视图如何使用

1.视图的概述 视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据.视图将一个查询的结果作为一个表来使用,因此视图可以被看作是存储的查询或一个虚拟表.视图来源于表,所有对视图数据的修改最终都会被反映到视图的基表中,这些修改必须服从基表的完整性约束,并同样会触发定义在基表上的触发器.(Oracle支持在视图上显式的定义触发器和定义一些逻辑约束) 2.视图的存储 与表不同,视图不会要求分配存储空间,视图中也不会包含实际的数据.视图只是定义了一个查询,视图中的数据是从基表中获取