场景是这样的:
1.查找表A中id最大值,比如是1000
2.在J2EE应用中用for循环执行批量insert操作,每次是找出最大的id然后加1,然后都显式commit。问题是,for循环第一次是可以的,第二次找出的最大值却是和第一次找出的是一样的。
但是我每次循环insert后都commit了,然后再循环。难道读的是缓存?求教

解决方案 »

  1.   

    -- 首先想搞清楚:你是在循环里面commit 还是在循环外面 commit ?
    -- 还有:你为什么要这样做?
      

  2.   

    1.我是在循环里面,每次执行好了,都commit
    2.我每次insert的时候我要获取里面最大值后加1作为主键3.这个主键有特殊用途,所以没有用sequence
      

  3.   

    代码比较复杂,就不贴了。
    但是场景我是描述清楚了。不知道oracle在执行期间的原理是什么
      

  4.   

    查看一下数据库隔离级别的设置。
    如果设置为Serializable,即使提交了,也看不到。
      

  5.   

    请问下,如何查看oracle的隔离级别
      

  6.   

    我都commit了,都不能在同一个事务中查询到已经insert的数据吗
      

  7.   

    你的select 必须要xie在for循环中才行啊。
    或者 你第一个select之后,for循环里面每个都+1不行吗?
    能减少数据库的访问次数,还是能提高不少效率的。
      

  8.   

    8楼:select我是写在for循环中的。
    因为主键是字母+数字的。比如“U00008"。现在问题解决了,是自己手动来拼这个主键的。