我希望在连接多个用户时检索字段的值并在Informix 12.1中安全地增加它。
在C语言中我想要的是并发环境中的{"message1":"message1"}{"message2":"message2"}
。
文档提到了一种方法,即使每个人都使用wait参数连接,锁定行,读取数据,递增数据并释放锁定。
所以这就是我的尝试:
lastnumber = counter++;
我可以看到该行被锁定,直到我提交或结束我的会话。
但是当我把它放在存储过程中时:
begin work;
select
lastnum
from tbllastnums
where id = 1
for update;
数据库给我一个语法错误。 (尝试使用不同的编辑器)那么为什么在存储过程中编写create procedure "informix".select_for_update_test();
define vLastnum decimal(15);
begin work;
select
lastnum
into vLastnum
from tbllastnums
where id = 1
for update;
commit;
end procedure;
子句会出现语法错误?有替代方案吗?
修改
这是我最终的结果:
for update
答案 0 :(得分:1)
如果您在“Informix SQL指南:语法手册”的SPL(存储过程语言)部分的Updating or Deleting Rows Identified by Cursor Name语句下找到了手册的正确位置FOREACH
,那么您'我会找到神奇的信息:
如果要在FOREACH循环中对当前游标行进行操作的UPDATE或DELETE语句中使用WHERE CURRENT OF游标子句,请在FOREACH语句中指定游标名称。虽然您不能在FOREACH语句的SELECT ... INTO段中包含FOR UPDATE关键字,但游标的行为类似于FOR UPDATE游标。
因此,您需要创建一个带游标名称的FOREACH循环并从那里获取它。
顺便提一下,如果您转到IBM Informix Knowledge Center并看到此图标:
即“显示目录”图标,您需要按此按钮才能看到导航到手册的有用信息。如果您看到此图标:
它是“隐藏目录”图标,但您应该能够看到左侧的内容。我花了一段时间才发现这个伎俩。我不知道为什么默认情况下我的内容被隐藏了,但我认为如果其他人也受到影响,那就是设计失误。