您的位置:首页 > 其它

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

2008-12-24 09:51 239 查看
环境

产品: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: