序列实际上是一个用户定义的伪表,它存放在用户指定的数据空间中,定义的语法如下:
CREATE SEQUENCE User.squencename INCREMENT BY 1 MAXVALUE 100000 MINVALUE 1 CYCLE CACHE 20 TABLESPACE 'tools';
它的含义是:
此序列名为:User.squencename 所属用户为:user
最大值:100000 最小值为:1 每次递境值为1
( 也可以定义序列为递减序列,此时INCREMENT BY 1应为DECREMENT BY -1代替
若在定义语句中出现CYCLE表示此序列到达最大或最小值时重新开始计数。但是由于
序列一般是用于oracle表中的主键(Primary key),所以序列的定义一般是不设置
CYCLE的。CATCHE参数表示是oracle中一个内部参数,具体设置应视后台服务器而定。
TABLESPACE指定了此序列所在的数据空间。
将序列值取出即可,但要注意一般不取当前值,而是取序列的下一个值。
select sequence.nextval from dual
实际使用
var
QueryTemp: TQuery;
sequenceNo: integer;
begin
QueryTemp := TQuery.Create(Application);
try
with querytemp do
begin
querytemp.databasename :=
'你连接oracle数据库所用TDataBase的名字';
querytemp.sql.clear;
querytemp.sql.add('select sequencename.nextval val from dual');
querytemp.open;
sequenceNo := querytemp.fieldbyname('VAL').asinteger;
//使用此时可以使用序列值
end;
finally
querytemp.free;
end;
end;