在informix

时间:2015-08-18 11:35:23

标签: sql informix

我已经按照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:

我的数据库:

  • informix Dynamic Server 12.10.FC5
  • IBM Informix JDBC驱动程序,用于IBM Informix Dynamic Server 3.70.JC2

1 个答案:

答案 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