关于设置事务回滚保存点的设置

下面用伪代码说明ingres数据库事务执行失败后全部回滚的实现过程 :

 

try
{

 savepoint(sp); //如果此处 保存点所依赖的transaction_handle事务句柄由connect()连接数据库时获取,则创建保存点成功,可以用rollback(sp)实现全部回滚;如果此时事务句柄为空,或者不是下面要执行事务的事务句柄,则此处savepoint(sp)创建保存点失败,要实现全部回滚必须用rollback(NULL);

  result=sql_query(A);//第一个查询语句A
if(result==failure)
  throw 1;
  savepoint(sp1); //第一个保存点sp1

 result= sql_query(B);
if(result==failure) throw 2;
  savepoint(sp2);

 result= sql_query(C);
if(result==failure) throw 3;

//提交事务
commit();

}
catch(int i)
{
  if(i==1)
{//全部回滚
 rollback(NULL); //参数为空时就可以全部回滚 ,这是因为如果自动提交事务关闭之后,在commit之前的所有query语句都在一个事务中
}
else if(i==2)
{
//部分回滚
   rollback(sp1); //回滚到sp1
}
}

你可能感兴趣的:(sql,c,数据库,null,query)