代码之家  ›  专栏  ›  技术社区  ›  gavenkoa

锁如何在提交后继续存在,或者如何将对锁定表的更改传播到另一个会话而不提交和丢失锁

  •  1
  • gavenkoa  · 技术社区  · 6 年前

    LOCK TABLE 比下一个长 COMMIT / ROLLBACK .

    提交 .

    所以我会做的 提交 /

    看来我需要和DB开两个会议。保持 在一个表中,在另一个表中处理。但我不明白如何在不关闭锁的情况下将更改传播到基表 提交

    1 回复  |  直到 6 年前
        1
  •  1
  •   Moudiz    6 年前

    下面是一个使用 AUTONOMOUS_TRANSACTION

    drop table EX_EMPLOYEE
    /
    drop table EX_EMPLOYEE1
    /
    create table EX_EMPLOYEE
    (id number(4) null)
    /
    create table EX_EMPLOYEE1
    (id number(4) null)
    /
    insert into EX_EMPLOYEE (id) values(1);
    /
    insert into EX_EMPLOYEE1 (id) values(1);
    /
    commit
    /
    create or replace procedure P_TEST
    as
      begin
      DELETE FROM EX_EMPLOYEE WHERE ID =1;
      P_TEST1();
    
    end;
    /
    
    create or replace procedure P_TEST1
    as
      PRAGMA AUTONOMOUS_TRANSACTION;
    begin
        DELETE FROM EX_EMPLOYEE1 WHERE ID =1;
    commit;
    end;
    /
    

    然后执行程序

    begin
    P_TEST();
    end;
    /
    

    select * from ex_employee where id =1;
    select * from ex_employee1 where id =1;
    

    您还可以从数据库中检查表是否仍处于锁定状态:

    SELECT * FROM V$LOCKED_OBJECT L
    INNER JOIN USER_OBJECTS  U ON(L.OBJECT_ID=U.OBJECT_ID);
    

    不要忘记在测试之后提交或回滚以释放锁。