在DB2中如何获得自增列的当前值
2013-03-29 09:25
225 查看
例如:
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
相关文章推荐
- SQL获得当前的日期和时间与DB2 中操作日期和时间
- [Windows Mobile 6.x] 如何获得当前运行的所有进程
- 在jar包中如何获得当前项目的绝对路径
- sql语句如何获得当前日期
- javascript如何通过鼠标左击获得当前元素ID
- 在C#中如何定义一个变长的结构数组?如果定义好了,如何获得当前数组的长度?
- SharePoint中如何获得当前用户的loginName
- VC: 如何获得当前程序的视图,文档指针
- 如何获得当前数据库的SCN值
- 也谈如何获得PostgreSQL序列的当前值(最后值)
- 如何通过T-SQL获得当前连接的客户端的IP和机器名...
- 1.如何获得当前文件路径
- delphi如何获得当前操作系统语言环境
- GridView中如何获得点击的当前行的索引?
- 如何获得当前类的字段,方法参数泛型的类型
- SharePoint中如何获得当前用户的loginName
- 如何获得插入当前语句的时候,自增ID的值
- 如何获得当前运行模块在进程地址空间的位置
- C#如何获得当前程序所在的目录
- 如何获得当前执行程序所在的路径