请问我这样写能不能起到不能是单进程还是多进程,每个进程都能取到唯一的值啊?系统环境c+informix
int GetSerNo()
{
$int e_iSerNo;
$database mas;
if(SQLCODE)
{
printf("打开数据库失败!,SQLCODE=%d\n",SQLCODE);
return (-1);
}
WriteTest("打开数据库成功!,SQLCODE=%d\n",SQLCODE);
$set lock mode to wait;
if(SQLCODE)
{
WriteTest("锁表失败!,SQLCODE=%d\n",SQLCODE);
return (-1);
}
WriteTest("锁表成功!,SQLCODE=%d\n",SQLCODE);
$begin work;/*开始事务*/
if(SQLCODE)
WriteTest("开始事务失败!,SQLCODE=%d\n",SQLCODE);
return (-1);
}
WriteTest("开始事务成功!,SQLCODE=%d\n",SQLCODE);
$select serno into :e_iSerNo from sysfile;
if(SQLCODE)
{
WriteTest("获取流水失败!,SQLCODE[%d]\n",SQLCODE);
return -1;
}
$update sysfile set serno= :e_iSerNo + 1 ;
if(SQLCODE)
{
WriteTest("更新流水号失败!,SQLCODE=%d\n",SQLCODE);
return -1;
}
$commit work;/*开始事务*/
if(SQLCODE)
{
WriteTest("提交事务失败!,SQLCODE=%d\n",SQLCODE);
return -1;
}
WriteTest("获取成功!\n",SQLCODE);
return e_iSerNo;
}
我的目的是锁住一个表,然后取到当前值并加1.这样来达到并发也能取到唯一的顺序号的目的。不知道有没有问题?
[解决办法]
应该是没问题,我们取流水号都是这样的,运行了很多年都没问题
[解决办法]
可以这样用,没问题