在 ORCALE 中如何使用ORCALE 中的序列(50分)

  • 主题发起人 主题发起人 sunqi
  • 开始时间 开始时间
S

sunqi

Unregistered / Unconfirmed
GUEST, unregistred user!
在 ORCALE 中 我想通过过程使用已定义好的序列 ,但不知如何使用,
请帮帮我 最好有一段源代码
 
select your_sequence.nextval from dual;

基表插入中引用序列
insert into your_tab (no,others) values (your_sequence.nextval, others_values);

查询当前序列值
select your_sequence.currval from dual;

 
序列实际上是一个用户定义的伪表,它存放在用户指定的数据空间中,定义的语法如下:
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;


 
flymonkey 回答的很详细 volan 的回答也正确 ,可惜我只有50 分 只好。。。。
 
多人接受答案了。
 
后退
顶部