免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6918 | 回复: 13
打印 上一主题 下一主题

DB2下有自增列这个功能吗?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-09-10 08:46 |只看该作者 |倒序浏览
RT,有的话如何实现?

论坛徽章:
0
2 [报告]
发表于 2003-09-10 12:36 |只看该作者

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

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

论坛徽章:
0
3 [报告]
发表于 2003-09-10 13:29 |只看该作者

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

老大 你给个连接也行啊,到IBM找,范围也太大了吧

论坛徽章:
0
4 [报告]
发表于 2003-09-10 13:35 |只看该作者

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

http://www-900.ibm.com/cn/support/viewdoc/detail?DocId=1222032000002

论坛徽章:
0
5 [报告]
发表于 2003-09-10 14:03 |只看该作者

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

太感谢了~~

论坛徽章:
0
6 [报告]
发表于 2003-09-10 16:16 |只看该作者

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

如何创建能自动加一的字段?

环境  产品: 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

论坛徽章:
0
7 [报告]
发表于 2003-09-12 15:24 |只看该作者

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

这篇文章说得很清楚 [http://www-900.ibm.com/developerWorks/cn/dmdd/library/techarticles/0302fielding/0302fielding.shtml#sequence]

论坛徽章:
0
8 [报告]
发表于 2003-09-12 17:29 |只看该作者

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

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

论坛徽章:
0
9 [报告]
发表于 2003-09-12 19:37 |只看该作者

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

我就正在用

论坛徽章:
0
10 [报告]
发表于 2003-09-16 11:12 |只看该作者

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

还有更简单的方法:

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。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP