说下oracle中视图和序列的用法:
视图
视图是通过对一个或多个表定义查询得到的,视图定义所依据的表被称为基表,说简单点就是视图联合一张或多张表另外成立一张表,可以对这张表进行搜素和DML操作。
建立视图
create view terminal_view as (select a.terminal_name, b.pdline_name,c.process_name,d.stage_name,e.emp_name,A.UPDATE_TIME from sys_terminal a , sys_pdline b , sys_process c , sys_stage d , sys_emp e where A.PDLINE_ID = b.pdline_id and a.process_id = c.process_id and a.stage_id = d.stage_id and A.UPDATE_USERID = E.EMP_ID);
注意 AS后面其实就是一个select语句,该语句查询得到的数据即形成视图,改变相关基表的数据会立马反应到视图上面。
使用视图的方式同普通table一样:
select * from terminal_view where emp_name = '001';
注意:
实际上,对视图执行DML也就是对基表执行DML. 对于多表联接的视图,必须要保证如下的条件才能进行DML操作:
(1) 在创建视图的SQL语句中,不能含有 group by ,compute,order by 以及集合操作的函数.
(2) 在创建的视图中,必须含有各个基本的主键.
(3) 在创建视图的SQL语句中,不能含有子查询语句,也就是说,创建视图的SQL语句必须是简单SQL语句
序列
Oracle提供了sequence对象,由系统提供自增长的序列号,通常用于生成数据库数据记录的自增长主键或序号的地方。
Sequence是数据库系统按照一定规则自动增加的数字序列。这个序列一般作为代理主键(因为不会重复),没有其他任何意义。
创建
Create Sequence
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,
CREATE SEQUENCE emp_sequence
INCREMENT BY 1 — 每次加几个
START WITH 1 — 从1开始计数
NOMAXVALUE — 不设置最大值
NOCYCLE — 一直累加,不循环
CACHE 10;
一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL
CURRVAL=返回 sequence的当前值
NEXTVAL=增加sequence的值,然后返回 sequence 值
如下,起点为3,每次增长2,最大999,可循环:
CREATE SEQUENCE SEQ_LC_TEST INCREMENT BY 2 START WITH 3 MAXVALUE 999 MINVALUE 1 CYCLE CACHE 3 ORDER;
使用方法:
SELECT SEQ_LC_TEST.NEXTVAL FROM DUAL;--每使用一次NEXTVAL 相应的sequence会自增一次 SELECT SEQ_LC_TEST.CURRVAL FROM DUAL;--返回当前值,不自增
INSERT INTO emp VALUES (<span style="font-family: Arial, Helvetica, sans-serif;">SEQ_LC_TEST</span><span style="font-family: Arial, Helvetica, sans-serif;">.nextval, ‘LEWIS’, ‘CLERK’,7902, SYSDATE, 1200, NULL, 20);--一般放在insert语句中</span>
注意:
第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在不同的SQl语句里面使用NEXTVAL,其值是不一样的。