blackuhlan 发表于 2007-07-11 10:29

如何产生一个序号

我想在informix 中产生一个序号,类似于oracle的sequence。办法是用一个存储过程处理一个特定表中的特定字段,取出该字段的值后让其自加。
现在的问题是:我在外面有事务,外面的事务回滚后,该字段的值也回滚,所以不起作用。有没有什么办法让存储过程中的事务不回滚?
或者有没有什么其他办法产生一个序号,基于数据库。

wenlq 发表于 2007-07-11 12:10

高版本有 sequence.
低版本可以用serial 来实现的。我试了下 那怕 rollback work了 ,serial 也会增加的。

blackuhlan 发表于 2007-07-11 13:24

serial可以不用插入表就取出来吗?

blackuhlan 发表于 2007-07-11 13:25

我上午也试了一下,但要删除纪录,插入纪录,查询结果3条语句,效率太低,有没有什么办法提高一下效率.

wenlq 发表于 2007-07-11 13:32

一个 insert
一个 select dbinfo( 'sqlca.sqlerrd1'   ) from systables where tabid =1 ;
delete 不必每次做,可以定时做。

效率最高的应该是用c 的信号量实现互斥, 共享内存放个整形变量自增。

blackuhlan 发表于 2007-07-11 14:31

共享内存有其他的问题,具体来说就是掉了就找不回来,所以不想用。我先试试.谢谢

大梦 发表于 2007-07-11 19:59

informix的高版本里面也有sequence,不知道你的是哪个版本!

SexyPipe 发表于 2007-08-31 15:32

加事物可以么?
在并发的情况,能保证不让其他用户更新该字段么?
我的怎么似乎不行啊,我的是ids9.4

d_y_liu 发表于 2007-10-26 15:11

定义一个serial类型的字段

shanshl 发表于 2007-10-30 16:00

原帖由 wenlq 于 2007-7-11 12:10 发表 http://bbs.chinaunix.net/images/common/back.gif
高版本有 sequence.
低版本可以用serial 来实现的。我试了下 那怕 rollback work了 ,serial 也会增加的。
同意,赫赫
页: [1]
查看完整版本: 如何产生一个序号