许多应用程序要求使用唯一的数字作为主键的值,你即可以在应用程序中构建代码来处理这种需求,也可以用一个序列来产生唯一的数字。如果你想要增进某些查询的性能,你应该考虑创建一个索引,你也可以用索引在列或列的集合上强制唯一性。你可以用同义词为对象提供可替代的名字。下面我们来介绍序列、索引和同义词三个数据库对象。

      一、创建和管理序列

       序列是用户创建的数据库对象,可以被多个用户共享。 序列的一个典型的用途是创建一个主键的值,它对于每一行必须是唯一的。序列由一个Oracle内部程序产生并增加或减少。 序列是一个节省时间的对象,因为它可以减少应用程序中产生序列程序的代码量。 序列号独立于表被存储和产生,因此,相同的序列可以被多个表使用。

       1.1 定义和查询序列

       用CREATE SEQUENCE语句自动产生序列数。语法:

CREATE SEQUENCE sequence   --sequence 是序列发生器的名字
[INCREMENT BY n]           --序列号之间的间隔,在这儿n是一个整数,
[START WITH n]             --产生的第一个序列数,默认值1。
[{MAXVALUE n| NOMAXVALUE}] --序列能产生的最大值,默认NOMAXVALUE(升序:10^27;降序:-1)
[{MINVALUE n| NOMINVALUE}] --最小序列值,默认NOMINVALUE(升序:1;降序-(10^26))
[{CYCLE | NOCYCLE}]        --指定序列在达到它的最大或最小值之后,是否继续产生,默认NOCYCLE。
[{CACHE n| NOCACHE}];      --指定Oracle服务器预先分配多少值,并且保持在内存中,默认缓冲20个值。

       如果INCREMENT BY值是负数,序列是降序。另外,ORDER | NOORDER选项可用,ORDER选项保证序列值按顺序产生,如果你将序列用于产生主键值它是不重要的,该选项仅与Parallel Server(并行服务)选项有关。如果序列值被高速缓冲,系统故障它们将被丢失。

       一旦创建了序列,它就被文本化在数据字典中。因为序列是一个数据库对象,你可以在USER_OBJECTS数据字典表中识别它。你也可以从USER_SEQUENCES数据字典视图中用选择确认序列的设置。下面是一个定义和查询序列的实例。

--创建序列
CREATE SEQUENCE seq_test
INCREMENT BY 2
START WITH 3
MAXVALUE 1000
NOCYCLE  --若用户产生主键,怎不使用CYCLE选项。
NOCACHE  --不允许高速缓冲;
--查询序列
SELECT object_name,object_id,object_type 
FROM USER_OBJECTS 
WHERE object_name = 'SEQ_TEST';
SELECT * FROM USER_SEQUENCES 
WHERE sequence_name = 'SEQ_TEST';
定义和查询序列实例

相关文章: