如题,
我开了两个Sql Window 窗口,
同一个查询语句:
select *   from   subject  居然得出两个不同的结果背景是这样的,查询之前以,我以Edit Data的方式打开了这个表subject ,然后改了某几条数据,提交后,再打开以上的两个窗口查询,一个查出来的是改之前的数据,一个查出来的是改之后的数据,请问这是什么原因,本人刚接触Oracle,感觉太多不懂了,与MS SQL Server相比,太多不方便了。

解决方案 »

  1.   

    2个窗口,即代表2个会话。
    多个用户同时执行的事务称为并发事务,并发事务会出现数据不同步的问题。所以,第2个用户如果想看到正确的结果,第1个用户在操作完之后,必须commit。参考下面的示例来理解这个问题。
      

  2.   

    我是在PL/SQL develper图形界面下操作的,已经提交了呀,“提交按钮”不是那个打勾按钮吗?我点击了呀我的操作系统是win7的,不会存在兼容问题吧。
      

  3.   


    估计是楼主你所说的提交有问题,commit才能称为提交,你可以是可执行了update而没有执行commit,这种情况下其它连接是看不到你所做的修改的。
      

  4.   

    哦,原来是这样,晕,这IDE功能还真多,比MS SQL Server复杂,看来是要买本书好好看看,
    麻烦大家给我推荐一本吧。
      

  5.   


    Oracle Datebase 10g sql开发指南   清华大学出版社
      

  6.   

    无论是什么系统里头,建议使用的都是sqlplus
    不建议图形界面
    SQL>commit;
    才是事务提交。当数据获取了行级锁的时候,表数据行被当前用户所占据,期间其他会话都不能对表数据进行操作。如果进行操作,会处于等待的状态,有待当前用户commit后,释放行级锁。其他用户才能进行操作,查询正确的结果。当前用户进行操作当然是正确的结果,其他用户查询的是旧结果。所以导致数据不一致。
      

  7.   

    应该是两个会话,第二次虽然没提交,但修改之后结果在缓存中,你在第二次的界面中查询实际是从缓存中读取,只有你提交(committ)那么两次查询的结果才一致