我已经按照this示例获取插入记录的最后一个ID,问题是我的应用程序有时会返回0
。我试过用sql developer
INSERT INTO ...
execute function sysmaster:yieldn(1); // wait 1 second
select dbinfo('sqlca.sqlerrd1') from informix.systables where tabid=1;
始终返回0.等待1秒只是为了模拟我的应用程序中的流量。
有人可以解释一下dbinfo('sqlca.sqlerrd1')
的含义吗。
PS:
我已经尝试过IBM site
中的示例执行时:
insert into fst_tab VALUES (0,1);
insert into fst_tab VALUES (0,4);
insert into fst_tab VALUES (0,6);
execute function sysmaster:yieldn(1);
insert into sec_tab values (dbinfo('sqlca.sqlerrd1'));
select dbinfo('sqlca.sqlerrd1') from informix.systables where tabid=1;
它会返回正确的ID,但是当我对插入行进行注释时:
insert into fst_tab VALUES (0,1);
insert into fst_tab VALUES (0,4);
insert into fst_tab VALUES (0,6);
execute function sysmaster:yieldn(1);
//insert into sec_tab values (dbinfo('sqlca.sqlerrd1'));
select dbinfo('sqlca.sqlerrd1') from informix.systables where tabid=1;
然后返回0
。
PS2:
我的数据库:
答案 0 :(得分:2)
SQLCA(SQL通信区)包含有关最新执行的SQL语句的信息。
在这个例子中:
INSERT INTO ...
execute function sysmaster:yieldn(1); // wait 1 second
select dbinfo('sqlca.sqlerrd1') from informix.systables where tabid=1;
SQLCA将包含execute function
的结果,而不是INSERT
的结果。要获取最新插入的序列号,您必须在dbinfo('sqlca.sqlerrd1')
后立即致电INSERT
。