情况是这样:我有一个事务,这个事务是对两张表进行插入操作
问题:在这个事务执行结束前,我能对其中一张表进行查询操作吗???

解决方案 »

  1.   

    可以查询,但是现在的insert 操作,在其他会话中看不到,只有该会话可以看到
      

  2.   


    --CREATE TABLE foo(username VARCHAR2(10));
    DECLARE
      v_username VARCHAR2(10);
    BEGIN
      SELECT COUNT(1) INTO v_username FROM foo;
      DBMS_OUTPUT.PUT_LINE('==>'||v_username);
      --结果为0  表中没有数据
      INSERT INTO foo(username) VALUES('chenzw');
      INSERT INTO foo(username) VALUES('chenzz');
      SELECT COUNT(1) INTO v_username FROM foo;
      DBMS_OUTPUT.PUT_LINE('==>'||v_username);
      --结果为2 表中有两条数据,但是该两条数据尚未commit
      ROLLBACK;
      --回滚,撤销刚才的insert事务操作
      SELECT COUNT(1) INTO v_username FROM foo;
      DBMS_OUTPUT.PUT_LINE('==>'||v_username);
      --结果为0  表中没有数据
    END;
    如上,在一个事务中,可以进行查询操作
      

  3.   

    事物有一致性的特性,因为你是对表进行了插入操作,在你提交之前,oracle是会把表锁住的,但这不影响你查询
      

  4.   

    READ UNCOMMITTED 幻想读、不可重复读和脏读都允许。