首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Informix >

请教小弟我这样写能不能起到不能是单进程还是多进程,每个进程都能取到唯一的值啊系统环境c+informix

2012-02-27 
请问我这样写能不能起到不能是单进程还是多进程,每个进程都能取到唯一的值啊?系统环境c+informixint GetSe

请问我这样写能不能起到不能是单进程还是多进程,每个进程都能取到唯一的值啊?系统环境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.这样来达到并发也能取到唯一的顺序号的目的。不知道有没有问题?


[解决办法]
应该是没问题,我们取流水号都是这样的,运行了很多年都没问题
[解决办法]
可以这样用,没问题

热点排行