• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

DB2下有自增列这个功能吗??

发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 94次 | 进入软件测试论坛讨论

领测软件测试网
RT,有的话如何实现?

 rick_zhang 回复于:2003-09-10 12:36:07
可以用触发器来做,你可以去ibm.com.cn上找一下想关资料.我以前试过,没问题的.这是在v5r1之前的解决方法.我不知道v5r2是不是已经有了更好的方法。

 xuguopeng 回复于:2003-09-10 13:29:24
老大 你给个连接也行啊,到IBM找,范围也太大了吧

 rick_zhang 回复于:2003-09-10 13:35:59
http://www-900.ibm.com/cn/support/viewdoc/detail?DocId=1222032000002

 xuguopeng 回复于:2003-09-10 14:03:34
太感谢了~~

 michael9406 回复于:2003-09-10 16:16:19
如何创建能自动加一的字段?

环境  产品: DB2/400
 平台: AS/400
 版本: R510 
问题  如何创建能自动加一的字段? 
解答 到目前为止,DB2 UDB for iSeries还没有支持字段自动加一的内部命令。从OS/400
V5R1M0开始支持的SQL存储过程使得实现这一功能变得简单易行。

1. 创建一个包含默认值为0的整数字段的表:
CREATE TABLE COLLECTION.TABLE (NUMBER_FIELD INTEGER NOT NULL WITH DEFAULT 0, ... 

2. 表建立完成后,立即创建一个触发器程序:
CREATE TRIGGER AUTO_NUMBER 
AFTER INSERT ON COLLECTION.TABLE
FOR EACH ROW MODE DB2SQL
BEGIN
DECLARE MAXNUM INT;
SET MAXNUM = (SELECT MAX(NUMBER_FIELD) FROM COLLECTION.TABLE);
SET MAXNUM = MAXNUM + 1;
UPDATE COLLECTION.TABLE SET NUMBER_FIELD = MAXNUM
WHERE NUMBER_FIELD = 0;
END

3. 建议在该表上建立唯一索引,以保证该整数字段没有被插入重复的值:
CREATE UNIQUE INDEX COLLECTION.INDEX ON COLLECTION.TABLE (NUMBER_FIELD) 
WITH 1 DISTINCT VALUES 

4. 如果想在一个已经存在的表中增加该功能,则需要在表中增加一个字段,并且手工将已存在的
记录进行自动加一的工作, 那么在这之后插入的记录就能够按照触发器自动加一:
ALTER TABLE COLLECTION.TABLE ADD COLUMN NUMBER_FIELD INTEGER NOT NULL WITH DEFAULT 0

5. 由于该触发器总会搜索表中最大的值,因此如果设定被删除的记录所占用的空间可以被重新
利用,那么该记录对应的数值将不被重新计算。

6. 由于该表定义的是整数类型的字段, 因此最大数值为: 2147483647,如果您需要更大的数,那么
可以将该字段该为BIGINT类型, 这样就可以达到 9223372036854775807 :
ALTER TABLE COLLECTION.TABLE ALTER COLUMN NUMBER_FIELD SET DATA TYPE BIGINT 
NOT NULL WITH DEFAULT 0

 sdj21 回复于:2003-09-12 15:24:32
这篇文章说得很清楚 [http://www-900.ibm.com/developerWorks/cn/dmdd/library/techarticles/0302fielding/0302fielding.shtml#sequence]

 rick_zhang 回复于:2003-09-12 17:29:12
这篇文章很有意思,因为我还没有升级V5R2,所以还没有具体了解.不过据说V5R2的DB2的功能有很大提高,比如可以使用CREATE TABLE tbl1 AS (SELECT * FROM LIB2/TBL2 WHERE...) WITH DATA 这样的语法来建立file.我想一定还有很多新特性.有谁已经用V5R2的,可以介绍一下.

 xuguopeng 回复于:2003-09-12 19:37:15
我就正在用

 人世间 回复于:2003-09-16 11:12:24
还有更简单的方法:

CREATE TABLE INVOICE_DATA             
(INVOICE INTEGER NOT NULL             
         GENERATED ALWAYS AS IDENTITY 
        (START WITH 1                 
         ,INCREMENT BY 1              
         ,NO CACHE)                   
,SALE_DATE DATE NOT NULL              
,CUSTOMER_ID CHAR(20) NOT NULL        
,PRODUCT_ID INTEGER NOT NULL          
,QUANTITY INTEGER NOT NULL            
,PRICE DECIMAL(18,2) NOT NULL         
,PRIMARY KEY (INVOICE))               

INVOICE 就是自动加1 的字段。
初始值为0时,写入第一条记录时值为0,以后累次加1。
初始值为1时,写入第一条记录时值为1,以后累次加1。

 xuguopeng 回复于:2003-09-16 11:52:38
楼上的看来是SQL高手,问个问题 在SYBASE数据库下有几个我还没找到对应的:
CONVERT
DATEADD
DATEDIFF

帮帮忙!

 人世间 回复于:2003-09-16 12:58:13
呵呵,SYBASE我也不熟呀,我用的是DB2的。
有一个SYBASE讨论区,你去找找吧!

 xuguopeng 回复于:2003-09-16 13:58:00
对了,再问一下楼上的,如何设置可以让用户在前台或者导航器下在创建表或者查看的时候不加库名呢??
例如:SELECT * FROM  tablename
但是现在我们必须都的这样:SELECT * FROM   LIBname.tablename

 wildfish 回复于:2003-10-27 09:44:55
aaaaa

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网