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/