当前位置: 首页 > news >正文

c 访问oracle视图,Oracle视图

一、视图的概念

视图是基于一个或者多个表上的预定义查询,这些表称为基表,从视图中查询数据的方法与从基表中查询数据的方法相同。视图是一个查看数据的窗口,是查询语句模板,视图本身没有数据,在数据库中只保存了视图的定义。

视图具有以下优点:

1)可以向数据访问者只开放访问视图的权限,屏蔽基表信息。

2)可以将复杂的查询语句保存为视图,简化了SQL语句的编写。

3)创建视图的时候,可以限制只访问基表中的部分列或者部分行的数据,这样可以实现一定的安全性。

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

5)从基表中按一定的业务逻辑抽出用户关心的部分数据创建视图,简化了业务逻辑。

二、创建视图

语法:

create [or replace] [{force|noforce}] view 视图名

as

select查询语句

[with read only]

语法解析:

or replace:如果视图已经存在,则替换旧视图。

force:即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用。

noforce:如果基表不存在,无法创建视图,该项是默认选项。

with read only:默认可以通过视图对基表执行增删改操作,with read only强调这是只读视图,不能通过该视图进行增删改操作。现实开发中,基本上不通过视图对表中的数据进行增删改操作。

示例一,在超女表中创建一个简单的视图V_GIRL,只提取编号、姓名、身材和颜值字段。

create or replace noforce view V_GIRL

as

select id,name,sc,yz from T_GIRL

with read only;

从V_GIRL视图中查询数据:

8367925aa31cec8c495e540f24361995.png

示例二,连接EMP表和DEPT表创建视图V_EMPDETAIL,隐藏了工资(sal)和备注(comm)字段。

create or replace view V_EMPDETAIL

as

select empno,ename,job,hiredate,EMP.deptno,dname

from EMP join DEPT on EMP.deptno=DEPT.deptno

with read only;

从V_EMPDETAIL视图中查询数据:

146c05216d0e343c5fa9237b5340f8e6.png

三、视图的状态

当创建视图后,Oracle会验证视图的有效性,如修改了基本表,可能会导致视图的不可用,数据字典的USER_OBJECTS的status字段中记录了视图的状态(VALID-有效;INVALID-失效)。

4786f2d4f6a82636b3a7adc1a5d75b41.png

我们来做一个测试。

1)删除T_GIRL表的name字段。

alter table T_GIRL drop column name;

2)执行一次查询视图,出现了错误。

a0869d32005405ca711374b3cd51ddab.png

3)查询视图的状态,成了INVALID。

cf3b36089d3df1155f76413f1901ae94.png

4)在T_GIRL表中增加name字段。

alter table T_GIRL add name varchar2(30);

5)查询视图的状态,还是INVALID,数据结构已恢复,但视图的状态未恢复。

bb7e654ac675355742da04765243d895.png

6)执行一次查询,视图已恢复正常。

f98a1cff3bd395d8276597cfa3c8ac23.png

7)再查询视图的状态,恢复成了VALID。

b5ad33350ed752b34114e83d02a36bf6.png

在上面的测试中,我们发现基表数据结构的改变导致了视图无效,数据结构恢复后,视图能自动恢复正常(中间有一点曲折)。

四、删除视图

语法:

drop view 视图名;

示例:

drop view V_GIRL;

五、视图的其它知识

视图还有两个方面的知识,大家可以了解一下:

1)本文只介绍了只读视图,对视图只会执行select操作,其实视图还可以进行增、删、改操作,但应用场景极少,二十年来,我从未见过。

2)本文介绍的视图是查询数据的窗口、是虚拟表、是SQL模板,视图本身没有数据,但是,有一种视图叫物化视图,是有数据的,但是,物化视图的应用也非常少。

六、版权声明

C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。

来源:C语言技术网(www.freecplus.net)

作者:码农有道

如果这篇文章对您有帮助,请点赞支持,或在您的博客中转发我的文章,谢谢!!!

如果文章有错别字,或者内容有错误,或其他的建议和意见,请您留言指正,非常感谢!!!

相关文章:

  • Oracle+12c+国家字符集,Oracle 12C CDB字符集修改
  • 确认32位oracle client,32位oracle client
  • 2012安装oracle客户端安装,Windows 2012群集标准版安装Oracle11G
  • linux提示有交换文件,Linux下如何设置交换文件?Linux下设置交换文件的方法
  • linux smartctl 命令,使用smartctl命令检查磁盘
  • printf linux 头文件,Linux C 格式化输出时要注意的问题
  • linux取消挂载并将分区释放,linux硬盘分区:分区,格式化,挂载,取消挂载,删除分区...
  • 服务器linux重启要多久,win2003或linux服务器一般多久重启一次
  • 系统无法使用ssh远程linux,如何ssh无法登录可以su切换的问题
  • linux提高其他线程优先级,如何在pthreads中增加线程优先级?
  • linux 硬盘报错日志,Linux内核I_O系统报错日志与硬盘故障对应关系.doc
  • linux 递归上传ftp,使用ftp递归地将文件放入远程服务器
  • linux下载ccle数据,对CCLE数据库可以做的分析--转载
  • linux 什么是io,Linux异步IO是什么?
  • linux基础实验报告6,Linux实验报告6参考解析.doc