数据库视图(oracle)
使用数据库视图通常出于以下两个目的:1。降低操作复杂度;视图是预编译的查询操作,一次定义,之后可快速调用;2。提高系统安全。视图作为数据库对象,可以将其权限独立出来赋给用户,可避免用户对基表的盲目危险操作,同时也可屏蔽一部分私密的属性列。
定义语句:
CREATE
[OR REPLACE
]
[FORCE
|NOFORCE
] VIEW
YOUR_VIEW_NAME
(COLNAME1,COLNAME2,COLNAME3,...,COLNAMEn)
AS
[YOUR_QUERY_STATEMENTS WILL WRITE HERE !]
[WITH CHECK OPTION
[CONSTRAINTNAME
constraint_name]]
[WITH READ ONLY
]
对视图的查询操作实际是运行建立视图的sql语句。所以当用户自己修改基表信息时,主表改变,查询视图时也同时输出最新的信息,这样做可以尽可能减少对数据库空间的占用,并且不需要同步操作。
视图也可进行DML操作,但是在操作时要注意以下原则:
条件一:在连接视图中不能有Order by排序语句。
这主要是因为采用了Order by排序语句后,记录的物理存储顺序发生了改变。此时,若在视图上进行了数据更新,则其对应的基础表找不到具体更改的物理位置。所以,会以失败告终。
类似的,也不能够在SQL语句中含有Group by、connetc
by等语句。若有这些语句的话,则数据库都不允许对数据进行数据更新操作。
条件二:基础表中所有的NOT NULL列都必须在这个视图中。
若想在视图上进行数据更新操作的话,则必须要求对应基础表中的所有不允许空的字段都在当前的视图中。其实这很好理解,若每个字段不允许为空,则又不在当前的视图中,则新增加记录的时候,这个字段就没有被赋值,故在保存时就会被基础表所拒绝。
另外,需要注意的是,无论是更新还是删除语句,若基础表中的某个非空列不在这个视图中,都无法进行更改。也许有人会问,如果用户不是增加记录,而只是更新
数据。那难道也要求在视图中包含所有的非空字段呢?答案是肯定的。因为数据库系统在提交更新事务之前就会对这个条件进行判断。
条件三:需要更新的列不是虚拟列。
在视图中,可能有些列的结果是通过列表达式定义的,在基础表中并不存在。我们
相关文档:
一、在ORACLE创建一个新的实例过程:
1、安装好ORACLE服务端。
2、创建数据库实例,使用ORAHOME目录下的"Configuration and Migration Tools"下的"Database Configuration Assistant"工具。
&nbs ......
在Linux下安装Oracle Database 9i
2009年05月11日 星期一 20:49
http://www0.ccidnet.com/tech/guide/2001/11/20/58_3761.html
Oracle9i 2000年10月在Oracle Open World上发布,为 Oracle 数据库、应用服务器和开发工具引进了许多新功能。Oracle9i是业界第一个完整、简单的用于互联网的新一代智能化的、协作各种应用的软 ......
我们假设是数据库管理员,为了数据库的安全,我们需要知道当前有多少连接数,最大支持多少连接数,可以用以下语句查询
select username,count(username),machine,status from v$session
&n ......
今天在一本书上看到的,感觉挺全的。印象中自己已经不知道百度了多少次这个问题,今天就记下来吧,方便以后查询。
数据库写进程在以下事件之一发生时把数据库高速缓冲区的数据写到数据文件上:
当脏缓冲区的数量超过了所设定的限额
当所设定的时间间隔已到
当有进程需要数据库高速缓冲区却找不到空闲的缓冲区时
当检查� ......
因开发要求,需要对oracle里的数据与数据文件作比较。如采用客户端连接oracle的方式则显得小题大做,且工作量大,不易维护。直接采用存储过程,调用UTL_FILE包的公共过程,显得方便得多。
首先,需要把数据文件所在的目录注册到oracle中,用create directory。。。语句,然后把此目 ......