视图与序列
一. 视图
<1> 建立视图
create [or repalce] view
vie_name[(column_name)[,...n]]
as
sub_querry
[with check option [constraint constraint_name] ]
[with read only]
1. 简单视图
create view
vw_emp
as
select
emp_no,
emp_name,
emp_salary,
emp_dep_no,
from
emp;
2. 复杂视图
包含函数, 表达式, 分组数据 的 sql 语句
# 基于雇员表emp建立视图, 用于同届输出每个部门的雇员数及平均工资
create view
vie_emp_temp( dep_no, emp_cnt, avg_salary )
select
dep_no,
count( * ),
round( avg(salary) ) )
from
employee;
group by dep_no;
3. 连接视图
连接视图由于涉及多个表, 不允许执行 insert 操作.
对于 upadate, delete 操作, 则在满足约束条件的情况下允许执行
create view
vie_emp
as
select
emp_no,
emp_name,
emp_salary,
dep_no,
dep_location
from
employee as e,
department as d
where
e.dep_no = d.dep_no;
4. 只读视图
不允许任何DML操作
create view
vie_emp
as
select
emp_no,
emp_name,
emp_salary,
emp_dep_no,
from
employee
with read only;
5. check约束
create view
vie_emp
as
select
emp_no,
enp_name,
emp_dep_no,
from
employee
where
salary > 15000
with check option constraint ck_salay;
# 当对这个视图进行修改插入的时候, 就必须满足工资大于15000这个约束, 不满足会报错
<2> 维护视图
1. 修改视图
视图修改相当于重建
create or replace view
vw_emp
as
select
emp_no,
emp_name,
emp_salary,
emp_dep_no,
from
emp;
2. 重新编译视图
alter view
vie_name
compile;
3. 删除视图
drop view view_name;
二. 序列
create sequence
sequence_name
[increment by n] # 步长, 即单位长度, 省略默认为1
[start with n] # 初始值, 省略默认为1
[{maxvalue / minvalue n | nomaxvalue}] # 最值
[{cycle | nocycle}] # 是否循环
[{cache n| nocache}] # 缓冲区大小, 默认为20. 适当的缓冲区可以改善序列性能
<1> 创建, 使用序列
create sequence
seq_no
increment by 1
start with 1
maxvalue 999999
nocycle;
# 生成序列的当前序列号
select
seq_no.currval
from
dual;
# 生成序列的下一个序列号
select
seq_no.nextval
from
dual;
insert into
emp(
emp_no,
emp_name )
values (
seq_no.nextval,
'Tester' );
<2> 维护序列
但是序列的初始值不能修改
# 修改序列
alter sequence
seq_no
increment by 88
maxvalue 999999999
nocycle;
# 删除序列
drop sequence
seq_no;
# 查看序列
select
sequence_name,
min_value,
max_value,
increment_by,
last_number
from
user_sequences;