(作者:陈玓玏)
一、视图的概念及优缺点
视图是从一个或多个表导出的虚拟的表,其内容由查询定义。其具有普通表的结构,但是不实现数据存储。其实视图的功能和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解决此问题。