设为首页 加入收藏

TOP

Oracle 10G中关于序列使用详解(二)
2014-11-24 02:33:09 来源: 作者: 【 】 浏览:7
Tags:Oracle 10G 关于 序列 使用 详解
我们可以把product_sequence.currval放在主键赋值, 而不用手动每次定义. 是否又再一次接近我们目的.

注意我们在定义使用了Cycle选项:即当序列自增到最大值或最小值时产生循环效果. 我们来看下实例.

--一直执行赋值语句 直到达到序列上限的最大值10

select product_sequence.nextval from ProductType

执行最后结果:

\

当我们再次执行赋值语句时 结果:

\

序列的值有最大上限10 又再次恢复到初始值1,实现一次循环. 如果再次执行其实同第一次执行时一样的,Cycle实现序列在一个特定范围内循环定义使用.

(C)使用序列填充主键-(核心内容)

上面做的都是准备工作, 我们要的最后结果即是在主键列中通过序列来自动赋值.当然前提表的主键定义时数据类型必须为整数. 在这里我还要再次提一下Cache这个选项.在使用序列填充主键时,常用设置为NoCache即采取默认方式. 当关闭数据库连接时所缓存的值会全部丢失. 导致主键产生的数值不连续的现象. 使用序列来填充主键标识:

1 --插入数据 时 序列值代替主键值定义

2 insert into ProductType(typeid,Typename,Createdate)

3 values(product_sequence.nextval,'使用了序列定义主键',default)

这种方式不必每次添加数据时查看主键的数值. 害怕插入重复数据. 而主键列的赋值工作完全交给序列来做. 我只需把精力投放在其他地方.

上面操作基本实现我们当初预想. 但我也想提出一个问题:

在微软的SQL Server平台上定义独立表结构的主键时. 可以同时指定多个列共同标识为该表的主键. 即如果多个合并在一起比对实现主键唯一标识. 而Oracle 10G中序列其实就分离这种关系. 两者之间相互独立. 也就是说主键的定义和主键赋值 是没有关-系的. 完全分开的. 序列只是负责独立的对主键进行赋值. 而至于主键约束的定义 没有关系.

(D)修改和删除序列

可以通过Alert Sequence子句来修改序列, 但是我在修改序列中常常会报错 而且很频繁.修改序列内容有如下限制:

(1)不能修改序列的初始值

(2)序列的最小值不能大于当前值

(3)序列的最大值不能小于当前值

修改序列的增量:

1 --修改序列的增量为2

2 alert sequence product_sequence increment by 2;

再次查询数据结果将以每次增量为2 增加. 如果在不使用情况下删除序列:

1 --删除序列 极其简单.

2 drop sequence product_sequence;

当我们添加多张表表中序列时, 我们可以同查询系统中User_sequences表来获取相关表的关于序列的详细信息. User_sequences是字典表的一部分.

至此以上是在Oracle 10G关于序列的全部用法.

摘自 猴子的博客

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇调整oracle回滚的速度 下一篇oracle实时插值速度突然变慢问题..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: