需要从Informix存储过程中恢复BIGSERIAL“主键”值

时间:2015-08-31 07:10:07

标签: stored-procedures

我有以下存储过程:

CREATE PROCEDURE eukno(pk BIGINT, requestee VARCHAR(20))
RETURNING BIGINT;
DEFINE eunid BIGINT;
INSERT INTO ent_uniq (eunid, eunreq) VALUES (pk, requestee);
RETURN eunid;
END PROCEDURE;

我将值插入到表中,但是在插入期间我需要返回主键值eunid以获得精确值。 eunidBIGSERIAL主键,起始值为9999000000,因此在我的第一次插入时,eunid会自动生成9999000001 存储过程使用参数(0,'用户名')执行,主存储自动增加1。需要在插入时检索确切的uniq eunid,因为许多用户将在一个时刻请求此ID。

1 个答案:

答案 0 :(得分:0)

DBINFO('serial8')函数返回最后一个SERIAL8列的键值。你正在插入一个BIGSERIAL;您需要改为使用DBINFO('bigserial')

SQL[2163]: CREATE PROCEDURE eukno(pk BIGINT, requestee VARCHAR(20))
         > RETURNING BIGINT;
         > INSERT INTO ent_uniq (eunid, eunreq) VALUES (pk, requestee);
         > RETURN DBINFO('bigserial');
         > END PROCEDURE;
SQL[2164]: execute procedure eukno(57, 'varieties');
57
SQL[2165]: execute procedure eukno(0, 'boredom');
58
SQL[2166]:

注意SERIAL是一个4字节的串行类型; SERIAL8和BIGSERIAL都支持8字节的序列号范围,但BIGSERIAL是更好的类型(出于各种原因)。

您可能还会注意到,在您的代码中,局部变量eunident_uniq.eunid列完全分开(它恰好与列名相同,但这就是全部),以及在返回或未使用时未初始化。