第四章Oracle数据库对象(8)

2019-06-17 19:54

第04章 数据库对象 eno 部门表dept

dno ename esalary dno dname 例1:如果一般职工不能查看工资,可以建立如下视图 SQL>CREATE VIEW v_emp_in AS

SELECT eno,ename,dno FROM emp;

例2:非职工不能查询员工工资外,还不能查询领导人员(部门1)的情况,视图如下: SQL>CREATE VIEW v_emp_out AS

SELECT eno,ename,dno FROM emp WHERE dno<>1; 例3:建立公司花名册视图

SQL>CREATE VIEW v_emp_dept(dept,no,name) AS

SELECT dept.dname,emp.eno,emp.ename FROM emp,dept

WHERE emp.dno=dept.dno;

4.4.2 使用视图

视图建立后,就象使用表一样可以查询。 1.查询视图:

SQL>SELECT * FROM v_emp_in WHERE dno=2;

视图的查询,最终转换为对基表的查询,这一转换过程,称为视图消解。上述查询消解为: SQL>SELECT eno,ename,dno FROM emp WHERE dno=2; 2.更新视图:

对视图的更新,最终是对基表的更新。如:

SQL>UPDATE v_emp_in SET ename=’刘晨’ WHERE eno=1234;

如果在定义视图时有WITH CHECK OPTION选项时,对视图的更新要满足视图定义的条件,如: SQL>INSERT INTO v_emp_out VALUES(2233,’蒋凤英’,1);

因为v_emp_out视图中的部门编号不能为1,所以查询数据不在视图定义中,插入出错。

- 36 -

第04章 数据库对象

如果定义视图时有选项 WITH READ ONLY选项,则不能更新。

即使没有WITH CHECK OPTION和WITH READ ONLY限制,有很多视图是不能更新的: (1)有DISTINCT关键值的视图;

(2)有GROUP BY、ORDER BY、CONNECT BY、START WITH子句的视图; (3)有AVG、SUM、MAX等分组函数的视图;

(4)有INTERSECT、UNION、MINUS等集合操作的视图。

4.4.3 维护视图

修改视图:

ALTER VIEW view AS query

重建视图:一般很少修改,直接建立或重建。

CREATE OR REPLACE VIEW viewname AS query; 重新编译:检查视图是否正确

ALTER VIEW viewname COMPILE; 删除视图:

DROP VIEW viewname;

4.4.4 视图信息

dba|user_views:保存了视图的名称、SQL语句及长度和拥有者等信息。 dba|all|user_updatable_columns:保存了视图中可以更新的字段信息。

4.4.5 系统视图

Oracle自动在数据字典中建立了很多系统视图,用于保存系统信息,这些视图不能修改,只能查询。有一种面向数据库的视图,这种视图有三个不同的前缀:

user_:当前用户相关的信息,当前用户可以访问; all_ :当前用户可以访问的全部信息,当前用户可以访问; dba_ :当前系统的所有信息,sys用户才可以访问。 如:user_tables,all_tables,dba_tables。 常用的有:

- 37 -

第04章 数据库对象

users、roles、sys_privs、tab_privs、role_privs用户和权限视图;

tables、indexs、views、synonyms、sequences、triggers、source数据库对象视图; ind_columns、tab_columns、updatable_columns列信息视图; tablespaces、sgements、extents逻辑结构视图。

另外,Oracle还有一种以v$打头的面向实例的视图,称为动态视图,是sys拥有的视图。如:v$parameter、v$sysstat、vssesstat、v$buffer_cache、v$rowchache、v$librarycache、v$latch、v$sga、v$pga、v$press、v$bgprocess、v$thread、v$log、v$logfile、v$archived_log、v$log__history、v$datafile、v$filestat、v$database、v$instance、v$controlfile、v$session、v$tablespace、v$tempfile、v$undostat、v$rollstat,v$transaction、v$rollname等等。

- 38 -

第04章 数据库对象

4.5 序列

4.5.1 序列概念

实体完整性要求表设置主键。当创建一个表时,如果其主键不是很明显,如流水数据,需要人工设置一个主键;如果主键是由多个字段组合而成,即主键由几个列才能确定,为了减少主键复杂性,不如单独设置一个人工主键。主键要求唯一而不重复。如何人工设置主键呢?序列可作为人工主键。

序列(sequence)是一个Oracle的对象,是一个NUMBER(38)的数值,以递增和递减的方式确保每次请求的数值唯一而不重复。序列的定义存储在数据字典中。数据库的关闭和开启不影响数值的唯一性和连续性。

Oracle序列独立于表,这与SQL SERVER不同,SQL SERVER是在一个表内定义,针对数值列使用IDENTITY(1,1)定义序列,并自动填写,在插入之前是不知道。而在Oracle中,序列是各个表可以共用,在插入之前是可知的。

4.5.2 创建序列

序列的要素有: 序列名称、初值、步长(正递增,负递减)、最大值(递增)或最小值(递减)、到达最大或最小值后的行为。创建序列的语法:

CREATE SEQUENCE [user.]sequencename

[START WITH n] [INCREMENT BY n] [MAXVALUE n|NOMAXVALUE] [MINVALUE n|NOMINVALUE] [CYCLE|NOCYCLE] [CACHE n|NOCACHE] [ORDER|NOORDER] 参数说明:

sequencename:序列名称。

- 39 -

第04章 数据库对象

[START WITH n]:初始值,缺省为1。

[INCREMENT BY n]:步长,缺省为1,为负数时是递减,正数为递增。

[MAXVALUE n|NOMAXVALUE]:最大值或没有最大限制(10的26次方),缺省为NOMAXVALUE。 [MINVALUE n|NOMINVALUE]:最小值或没有最小限制(-10d的26次方),缺省为NOMINVALUE。 [CYCLE|NOCYCLE]:到达最大值后循环(CYCLE)或停止(NOCYCLE),缺省为NOCYCLE。 [CACHE n|NOCACHE]:是否将最近的N个值放入缓冲区中,缺省为NOCACHE。 [ORDER|NOORDER]:并行运行时是否顺序产生,缺省为NOORDER 例1:使用缺省项创建

SQL>CREATE SEQUENCE techer_ID_seq; 例2:指定参数创建

SQL>CREATE SEQUENCE student_ID_seq;

START WITH 1021 INCREMENT BY 1 MAXVALUE 9,999,999,999 NOCYCLE CACHE 20;

4.5.3 使用序列

序列有可以访问的值:CURRVAL和NEXTVAL。分别返回当前值和下一个值。访问方式为:sequencename.CURRVAL, sequencename.NEXTVAL。一般使用NEXTVAL。

查询:

SQL>SELECT teacher_id_seq.nextval FROM dual; 1

SQL>SELECT teacher_id_seq.nextval FROM dual; 2

SQL>SELECT teacher_id_seq.nextval FROM dual; 3

- 40 -


第四章Oracle数据库对象(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:污水处理283个为什么(绝对不错)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: