如何从 Informix 中的 SQL 语句中获取最后插入的 ID。我知道 DBINFO,但是如何让 SQL 像“插入 table_name(字段)值(值)”来返回最后插入的 ID?
3 回答
哪种宿主语言?
有关为 SERIAL 列创建的值的信息位于 SQLCA(SQL 通信区)中。有关为 BIGSERIAL 列创建的值的信息可通过函数调用获得。有关为 SERIAL8 列创建的值的信息可通过不同的函数调用获得。但是,ESQL/C 和 ODBC 和 JDBC 之间的细节有所不同,并且......如果您同时拥有 SERIAL 和 SERIAL8 或 BIGSERIAL,您可以找到大量信息(但会有关于为什么您同时拥有这两种类型的问题)一张桌子)。
Informix: how to get an id of last insert record的问题提供了与此类似的信息(感谢seekerOfKnowledge找到它)。
如果您想要严格的 SQL,这似乎可行。
select tabid FROM "informix".systables where tabname = 'sm_job_cost' /* 607 */
从系统表中选择 DBINFO('sqlca.sqlerrd1') WHERE tabid = 607; /* 0 */
插入 sm_job_cost (smjc_jb_prodlnk, smjc_prft_ctr) 值 (1, 2)
从系统表中选择 DBINFO('sqlca.sqlerrd1') WHERE tabid = 607; /* 1 */
即使它是明显的,也只是@Belmiris 答案上的一个注释,可能会让新手感到困惑:要检索最后插入的序列值,您不需要在 SELECT DBINFO 查询中指定 tabid。只是一个
SELECT DBINFO('sqlca.sqlerrd1') FROM systables LIMIT 1 就足够了。