数据库环境
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production问题:
对数据进行更新.更新成功后有commit;但是通过存储过程查询.(偶尔出现)是更新前的数据.如果直接使用SQL查询 能得到正确的结果.过段时间.用存储过程查询.得到的结果是更新后的.
请问如何解决?

解决方案 »

  1.   

    1、确定你存储过程查询是在update的commit之后的
    2、确定你更新的与存储过程查询的是同一个表,别一个是实体表,一个是物化视图
    3、oracle的特性就是事物一致,不可能出现你说的情况,肯定是你逻辑或者描述有偏差的地方,重新检查一下
      

  2.   

    肯定是commit的时机问题
      

  3.   

    不明白你的意思.情况是这样的.
    A用户执行存储过程修改了一个数据.(执行成功)其它用户去查(存储过程),修改过的数据,发现没改过来.于是我用PLSQL登录进去调用(存储过程)得到的结果是没更新前的.我再把存储过程中查询语句单独执行.得到了正确的结果.再过了会儿,去执行存储过程,又得到了正确的结果.
      

  4.   

    A用户执行存储过程修改了一个数据.(执行成功)
    commit放在这个存储过程里,不要在外部commit
      

  5.   

    如果commit本身就在这个存储过程里,查找业务原因,没有什么可能导致里面的update操作执行条件不满足
      

  6.   

    存储过程执行完毕后请点击cmmit
    没commit,再打开窗口就是其他session了
    当然查的是没改之前的不明白你的意思.情况是这样的.
    A用户执行存储过程修改了一个数据.(执行成功)其它用户去查(存储过程),修改过的数据,发现没改过来.于是我用PLSQL登录进去调用(存储过程)得到的结果是没更新前的.我再把存储过程中查询语句单独执行.得到了正确的结果.再过了会儿,去执行存储过程,又得到了正确的结果.
      

  7.   

    程序是自动commit 问题是偶尔出现于是我用PLSQL登录进去调用(存储过程)得到的结果是没更新前的.我再把存储过程中查询语句单独执行.得到了正确的结果.再过了会儿,去执行存储过程,又得到了正确的结果.这已经是其它会话了.