我做了一个充值的业务,接收终端的数据,充值成功则提交若干条update,insert语句,然后发送给终端充值成功的信息。然后等待终端的回应,如果网络超时等原因引起终端收不到我发的充值成功信息,则终端发一条充值失败的信息给我。我再将充值所做的update,insert等操作回滚。请问这个回滚能实现吗?怎么实现?我是用sql语句做的操作,不是事务。请问这个逆向错做怎么做?

解决方案 »

  1.   

    个人感觉无法实现
    因为你这根本是两件事,执行UPDATE INSERT后,必须COMMIT这个事务,这次操作才算完成。
    如果不COMMIT,你的过程无法执行完,数据表也会锁定在这个事务当中。
    也就是说,你这次的UPDATE INSERT操作并没有完成。如果COMMIT,把这件事做完的话,是无法ROLLBACK的。。
    所以无法实现。。
      

  2.   

    create table T_TEMP
    (
      CUSTOMER_CODE     VARCHAR2(32),
      DIVISION_ORG_ID   NUMBER(16),
      DIVISION_ORG_NAME VARCHAR2(100)
    )declare
      ld_divi number(16);
    begin
      insert into t_temp (division_org_id) values (2);
      select count(*) into ld_divi from t_temp;
      dbms_output.put_line(ld_divi);
      savepoint a;
      insert into t_temp (division_org_id) values (3);
      select count(*) into ld_divi from t_temp;
      dbms_output.put_line(ld_divi);
      savepoint b;
      insert into t_temp (division_org_id) values (4);
      select count(*) into ld_divi from t_temp;
      rollback to b;
      dbms_output.put_line(ld_divi);
    end;
    参考一下这段代码
      

  3.   

    问题就如3楼说的那样,4楼的方法如果用事务的话也行,不过我们只能用sql语句,直接用封装好的otl的接口应该是没办法实现