(作者:陈玓玏)

一、视图的概念及优缺点

视图是从一个或多个表导出的虚拟的表,其内容由查询定义。其具有普通表的结构,但是不实现数据存储。其实视图的功能和select语句是一样的,只是避免了重复写较复杂、使用频率较高的子查询。

视图的优点 有:1、避免大量重复代码的出现;2、避免大量占用空间的临时表的出现;3、实现简单;4、数据的相对安全性,对于部分用户,只开放可供查询的数据,并限制其修改和删除权限,可以避免基础表结构受到损害。

视图的缺点 :1、视图本质上还是查询,所以每次调用视图时,都需要从基础表里再执行一次查询语句,时间上来说比较慢;2、视图的修改和删除有一定的条件,而且有些情况下视图的修改和删除会涉及基础表数据的修改和删除,这个一定要谨慎把握。

二、视图的使用

什么情况下视图不能修改呢?

要通过视图更新基本表数据,必须保证视图是可更新视图。即可以在INSET、UPDATE或DELETE等语句当中使用它们。对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系,因为这样才能够反向映射到原基础表。还有一些特定的其他结构,这类结构会使得视图不可更新。

如果视图包含下述结构中的任何一种,那么它就是不可更新的:

(1)聚合函数;

(2)DISTINCT关键字;

(3)GROUP BY子句;

(4)ORDER BY子句;

(5)HAVING子句;

(6)UNION运算符;

(7)位于选择列表中的子查询;

(8)FROM子句中包含多个表;

(9)SELECT语句中引用了不可更新视图;

(10)WHERE子句中的子查询,引用FROM子句中的表;

(11)ALGORITHM 选项指定为TEMPTABLE(使用临时表总会使视图成为不可更新的)。

 --创建视图
 create or replace view viewName
 select * from tableName
--从视图中查询数据
select * from viewName
--删除视图
drop view viewName

注意,drop view不会对基表有影响,但是对于单表中产生的不含聚合函数的view,delete view中的数据可能会对基表有影响,请谨慎使用。

三、ORA-00998错误

ORA-00998: must name this expression with a column alias

解决方案:对使用了case when的列定义别名,当然了,最好是对所有的列和子查询的table都定义别名,一来避免出现类似的错误,二来对表和列定义别名能够提高SQL语句的效率。

参考文章:
https://blog.csdn.net/yangkai_hudong/article/details/7632085(包括视图的概念及各种使用)
https://www.xuebuyuan.com/1427852.html(专门测试了对视图或基表进行操作对相互的影响)

(作者:陈玓玏)一、视图的概念及优缺点视图是从一个或多个表导出的虚拟的表,其内容由查询定义。其具有普通表的结构,但是不实现数据存储。其实视图的功能和select语句是一样的,只是避免了重复写较复杂、使用频率较高的子查询。视图的优点有:1、避免大量重复代码的出现;2、避免大量占用空间的临时表的出现;3、实现简单;4、数据的相对安全性,对于部分用户,只开放可供查询的数据,并限制其修改和...
告警日志里这两天一直显示这个错误ORA-00600:internalerrorcode,arguments:[kcblasm_1],[103],[],[],[],[],[],[] TueAug1209:20:17CST2014 Errorsinfile/u01/app/oracle/admin/orcl/udump/orcl_ora_29974.trc: ORA-00600:internalerrorcode,arguments:[kcblasm_1],[103],[],[],[],[],[],[] TueAug1209:30:17CST2014 Errorsinfile/u01/app
SQL>   select 'STAT...'||a.name,b.value SQL>   from v$statname a,v$mystat b SQL>   where a.STATISTIC#=b.STATISTIC# SQL>   union all
ORA-00942错误表示用户没有访问对象的权限,或者对象不存在。在查询V$表时,这个错误通常是因为用户没有足够的权限来访问这些系统视图。 要解决这个问题,你可以尝试以下步骤: 1. 确保你正在使用具有访问V$表的权限的用户登录到Oracle数据库。如果你是以不具备这些权限的用户身份登录的,你可以尝试使用具有访问权限的用户进行查询。 2. 如果你已经使用了具有访问权限的用户,但仍然收到ORA-00942错误,请确保你正确地引用了V$表的名称。确保在查询使用了正确的大小写,并且没有拼写错误。 3. 如果你确定你正在使用正确的用户并且没有拼写错误,但仍然无法访问V$表,请联系数据库管理员(DBA)以获取更多帮助。他们可以检查你的权限设置并确保你有足够的权限来访问V$表。 总之,ORA-00942错误表示你没有足够的权限来访问V$表。通过使用具有访问权限的用户登录或联系DBA解决此问题。