管理Oracle视图和序列
平台:redhat linux as5 ,oracle10g
1.管理视图
1.什么是视图
视图是一个表或多个表的逻辑表示,其查询输出作为表对待,因此也被称为虚表,视图本身没有任何数据,它不占用任何表空间,在视图上的操用实际都是针对视图基表进行的.
2.建立简单视图
首先建一个基表
SQL>grant create any view to "Y"
SQL> conn y / 123
SQL> create table t(i number,v char(10),b int);
SQL> insert into t values(1,'a',10);
SQL> insert into t values(2,'b',20);
SQL> insert into t values(3,'c',30);
SQL> commit
SQL> select * from t;
I V B
------------ ----------
1 a 10
2 b 20
3 c 30
|
简单视图
create view t_v as select * from t;
SQL> select * from t_v;
I V B
------------- ----------
1 a 10
2 b 20
3 c 30
|
对视图DML操作(insert)
SQL> insert into t values(4,'d',40);
SQL> commit;
SQL> select * from t_v;
I V B
---- ------- ------------
1 a 10
2 b 20
3 c 30
4 d 40
|
update
SQL> update t_v set i=10 where v='a';
SQL> commit
SQL> select * from t_v;
I V B
----- ------- ----------
10 a 10
2 b 20
3 c 30
4 d 40
|
在基表中查询
SQL> select * from t;
I V B
---- -------- ----------
10 a 10
2 b 20
3 c 30
4 d 40
|
可见对视图的一切操作本质上还是对其表的操作.
3.创建定义check约束的视图
SQL> create view t_v as select * from t where i=10 with check option constraint chk_i;
View created.
SQL> select * from t_v;
I V B
------------- ----------
10 a 10
#查找约束
SQL> select constraint_name from user_constraints;
CONSTRAINT_NAME
------------------------------
CHK_I
|
建立check约束的作用使某个字段为特定值,上面例子中当给视图插入数据时”I”只能为10,如下
SQL> insert into t_v values(1,'e',25);
ERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation
SQL> insert into t_v values(2,'e',25);
iERROR at line 1:
ORA-01402: view WITH CHECK OPTION where-clause violation
SQL> insert into t_v values(10,'e',20);
1 row created.
SQL> select * from t_v;
I V B
---- ------------ ----------
10 a 10
10 e 20
|
3.建立复杂视图
先查看一下基表
SQL> select * from t;
I V B
----- ---------------------------- ----------
10 a 10
2 b 20
3 c 30
4 d 40
10 e 20
10 d 15
|
创建复杂视图(字段带函数)
SQL> create view t_v1 as select max(i) maxi,sum(b) sumb from t group by i;
View created.
SQL> select * from t_v1;
MAXI SUMB
------------- ----------
2 20
4 40
3 30
10 45
|
4.修改视图
SQL> create or replace view t_v(i,v) as select i,v from t;
View created.
SQL> desc t_v;
Name Null? Type
----------------------------------------- -------- ----------------------------
I NUMBER
V CHAR(10)
SQL> select * from t_v;
I V
---------- ----------
10 a
2 b
3 c
4 d
10 e
10 d
|
5.重新编译
SQL> alter view t_v compile;
View altered.
|
6.删除视图
SQL> select view_name from user_views;
VIEW_NAME
------------------------------
T_V
T_V1
SQL>drop view t_v
SQL> select view_name from user_views;
VIEW_NAME
------------------------------
T_V1
|
2.管理序列
序列是一种用于生成唯一数字值的数据库对象,可以帮助DBA自动提供惟一的主键值,其实序列并不是必须有的,如果不使用序列,编写程序会生成这些数字值,通过使用序列,可以简化这种处理操作.
1.建立序列
SQL>grant create any sequence to “Y”
SQL>conn y / 123
#语法
SQL>create sequence sequence_name optin(s)
Options:
Increment by int
Maxvalue int | nomaxvalue
Minvalue int | nominvalue
Cycle | nocycle
Cacle int | nocache
Order | noorder
SQL> create sequence t_seq start with 10
2 increment by 5
3 nomaxvalue
4 nocycle
5 cache 20;
|
2.访问序列
Oracle为序列提供了两个伪列nextval,currval,可通过表dual访问
SQL> select t_seq.nextval from dual;
NEXTVAL
----------------------
10
SQL> select t_seq.nextval from dual;
NEXTVAL
------------------------
15
SQL> select t_seq.currval from dual;
CURRVAL
----------------------
15
|
3.使用序列
Oracle规定在使用序列前要先执行一次nextval
使用序列很简单只要直接用t_seq.currval或t_seq.nextval调用就可以了.
SQL> insert into t values(t_seq.nextval,t_seq.nextval);
1 row created.
#修改序列
SQL>alter sequence sequence_name optin(s)
Options:
Increment by int
Maxvalue int | nomaxvalue
Minvalue int | nominvalue
Cycle | nocycle
Cacle int | nocache
Order | noorder
#删除序列
SQL>drop sequence dequence_name
|
4.使用序列注意事项
1.cache跳号
建立序列时cache选项可以把N个序列存在cache中,然后用户到cache取序列,当oracle不正常关闭时,cache中的内容就会丢失,而再重新生成序列等待用户来取,这样就可能丢失一部分序列,出现跳号
2.Rollback缺口
在执行语名时提取出了序列,当执行rollback语名取消事务操作时,被提取了来的序列就丢了,所以有rollback缺口
3.查看视图,序列常用的数据字典
dba_view all_view user_view
dba_updatable_columns all_updatable_columns user_updatable_columns
dba_sequences all_squences user_sequences
|
本文转自 vfast_chenxy 51CTO博客,原文链接:http://blog.51cto.com/chenxy/170352,如需转载请自行联系原作者