需要从 Informix 存储过程中恢复 BIGSERIAL "primary key"值



我有以下存储过程:

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,'username')执行存储过程,主存储过程自动增加1。需要在插入时检索精确的uniq eunid,因为许多用户将在同一时刻请求此ID

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列完全分开(它恰好与列具有相同的名称,但仅此而已),并且在返回时未初始化或未使用。

最新更新