在DB2中如何获得自增列的当前值


方法一:用identity_val_local()函数。 

例如: 
create table ttt 

id int generated by default as identity, 
name char(20) not null, 
salary double not null 

); 

insert into ttt (name, salary) 
values ('Bill Gates', 123.45); 

insert into ttt 
values (default, 'Bill Clinton', 4567.89); 

values ( identity_val_local() ); 
该函数返回最后一次生成的Identity值。 

方法二:使用sequence 
在数据库中创建若干个独立的序列号发生器,并分别命名,例如: 
create sequence ACCOUNT; 或 
create sequence CUSTOMER as NUMERIC(15); 等等 
2. 删除原有表定义中的 generated [by default ¦always] as identity 属性。 
3. 在应用程序中用NEXTVAL获得每一个序列号发生器的下一个序列号,例如: 
EXEC SQL insert into ttt values ( NEXTVAL FOR ACCOUNT , ......); 
或 
EXEC SQL values NEXTVAL FOR ACCOUNT into :acctseq; 
EXEC SQL insert into ttt values ( :acctseq, ......); 
4. 可以利用PREVVAL获得每一个序列号发生器的当前值(刚刚生成并使用过的值): 
values PREVVAL FOR ACCOUNT into :acctseq; 
但是需要注意,在一个数据库连接建立后,PREVVAL只有在调用一次NEXTVAL之后才可以使用。 
5. 使用此方法可以实现在多个表之间的序列号共享。 
6. 对于应用程序不关心序列号的表,仍然可以用identity字段实现。事实上,identity字段也是通过sequence实现,其对应关系可以在sysibm.syssequences表中查到。每一个identity字段由一个内部sequence名与之相对应。Identity字段与sequence的最大不同在于:identity只能在一个表中使用,多个表不可以共享identity;而sequence可以通过命名方式在同一个数据库内部的多个表中共享序列号发生器。 
转自:http://hi.baidu.com/sqlercn/item/c0d2e043f4217295833ae1b2   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值