Informix 和 C:如何从 bigserial 字段类型获取最后插入的序列号

Informix and C: How to get the last inserted serial number from bigserial field type

我们有一个包含多个 table 具有“串行”类型列的数据库。遗留 C 应用程序将数据写入这些 table 并使用“sqlerrd[2]”获取刚插入的数据的序列号。

insert into email(serial_number, email_id) values(0, 'test@test.com')

由于序列号用完了,我们正在迁移到“bigserial”。但是,上述从“sqlerrd[2]”中获取序列号的逻辑不起作用,因为它是“integer”类型。

处理此问题的正确解决方案是什么?

注意:作为解决方法,我们目前正在调用 ifx_getbigserial 以获取序列号。但是,我们担心,还有多个 table 和并发事务,我们不确定 API 是如何工作的?这个 API 没有提到 table 名称,我们的单元测试显示,我们得到了正确的数据,但不确定,这是正确的解决方案。

使用ifx_getbigserial()函数是正确的。它 returns 有关为当前会话生成的最后一个 BIGSERIAL 值的信息。其他会话不会影响它。但是,如果您将值插入到多个 table 中,每个 table 都有一个 BIGSERIAL 列,则必须在插入到每个 table 之后和下一次插入之前通过 ifx_getbigserial() 检索插入的值具有 BIGSERIAL 列的相同 table 或任何其他 table。