课程表

Oracle 基础教程

Oracle 进阶教程

Oracle PL/SQL

Oracle OEM

Oracle 备份和恢复

Oracle RAC

工具箱
速查手册

Oracle 序列和视图

当前位置:免费教程 » 数据库/运维 » Oracle

一、Oracle序列

Oracle序列Sequence是用来生成连续的整数数据的对象,它经常用来作为业务中无规则的主键。Oracle序列可以是升序列也可以是降序列。

创建Oracle序列的语法结构如下:

  1. CREATE SEQUENCE sequence_name
  2. [MAXVALUE num|NOMAXVALUE]
  3. [MINVALUE num|NOMINVALUE]
  4. [START WITH num]
  5. [INCREMENT BY increment]
  6. [CYCLE|NOCYCLE]
  7. [CACHE num|NOCACHE]

语法解析:

1、MAXVALUE/MINVALUE:指定的是序列的最大值和最小值。

2、NOMAXVALUE/NOMINVALUE:不指定序列的最大值和最小值,使用系统的默认选项,升序的最大值:10^27次方,降序是-1。升序最小值:1,降序的最小值:-10^26。

3、START WITH:指定从某一个整数开始,升序默认是1,降序默认是-1。

4、CYCLE | NOCYCLE:表示序列达到最大值或者最小值的时候,是否重新开始。CYCLE:重新开始,NOCYCLE:不重新开始。

5、CACHE:使用 CACHE 选项时,该序列会根据序列规则预生成一组序列号。保留在内存中,当使用下一个序列号时,可以更快的响应。当内存中的序列号用完时,系统再生成一组新的序列号,并保存在缓存中,这样可以提高生成序列号的效率 。

6、NOCACHE:不预先在内存中生成序列号。 


二、Oracle视图

oracle视图可以理解为数据库中一张虚拟的表,他是通过一张或者多张基表进行关联查询后组成一个虚拟的逻辑表。查询视图,本质上是对表进行关联查询。

视图的本身是不包含任何数据,只是一个查询结果,当基表的数据发生变化时,视图里面的数据也会跟着发生变化。我们经常在实际开发过程中遇到的视图可以大概分为三种:单表视图、多表关联视图、视图中含有子视图。

视图的作用和优势

既然视图在实际开发过程当中被广泛使用到,它到底有哪些作用和优势呢?

1、使数据简单化:可以将复杂的查询创建成视图,提供给他人使用,他人就不需要去理解其中复杂性的业务关系或逻辑关系。这样对视图的使用人员来说,就简化了数据的,屏蔽了数据的复杂性。

2、表结构设计的补充:系统刚刚开始设计时,大部分程序是直接访问表结构的数据的,但是随着业务的变化、系统的更新等,造成了某些表结构的不适用,这时候去修改表结构对系统的影响太大,开发成本较高,这个时候可以创建视图来对表结构的设计进行补充,降低开发成本。程序可以直接通过查询视图得到想要的数据。

3、增加安全性:视图可以把表中指定的字段展示给用户,而不必把表中所有字段一起展示给用户。在实际开发中,视图经常作为数据的提供方式,设置为只读权限提供给第三方人员进行查询使用。

创建视图

创建视图的语法结构如下:

  1. CREATE [OR REPLACE]  VIEW view_name
  2. AS
  3. SELECT查询
  4. [WITH READ ONLY CONSTRAINT]

解释:

1、OR REPLACE:如果视图已经存在,则替换旧视图。

2、WITH READ ONLY:默认不填的,用户是可以通过视图对基表执行增删改操作,但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行 insert 操作,或者基表设置了某些约束,这时候插入视图或者修改视图的值,有可能会报错), WITH READ ONLY 说明视图是只读视图,不能通过该视图进行增删改操作。但是在现实开发中,基本上不通过视图对表中的数据进行增删改操作。 

案例1、利用学生信息表(stuinfo)、班级表(class)关联创建视图,只提供一些学生基本信息和班级信息(剔除学生一些敏感信息:如身份证,家庭地址等)。代码如下:

  1. create view vw_stuinfo as 
  2. select a.stuid,--学号
  3.        a.stuname,--学生姓名
  4.        a.grade,--年级
  5.        a.sex,--性别(1:男、2:女)
  6.        a.age,--年龄
  7.        b.classname,--班级
  8.        b.monitorname,--班长
  9.        b.headmastername--班主任
  10.   from stuinfo a, class b
  11.  where a.classno = b.classno;
  12. select * from vw_stuinfo;

结果如下:

1.jpg

转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号