在baidu上查了一下,就是没发现介绍oracle游标处理机制的文章(深入一点的,呵呵)在游标处理中,究竟是在什么时候从数据库读取数据,open时还是fetch时?还有,读取时是一次性查询到所有数据还是只取一条数据?谁有这方面的文章或者资料,希望不吝赐教^_^ [email protected]谢谢专家赐教!

解决方案 »

  1.   

    文章没有,我自己用的感觉是:游标是个指针,所以是在select的结果然后给个指针变量。所以open时已从从数据库读取数据select,fetch读取一条数据进来,所以不是一次性读入,比如成千上万条数据的指针,全部读入那效率不是很低吗?应该和高级语言一样,只是一个数据的入口,并没有把所以数据读入,当fetch到那条才读进来。这是我自己对游标的看法。
    --------------如果有错的地方欢迎大家指出来。-------------------------
    下面这篇希望能给楼主些帮助。
    http://www.phpcat.net/oracle/2878.htm
      

  2.   

    谢谢啊   Eric_1999(╙@^@╜)
      

  3.   

    open是打开,fetch才是具体操作,一次一条。我认为open得时候已经存了所有的数据
      

  4.   

    open是打开游标,fetch是一次取一条记录,还可以用for loop
      

  5.   

    好像是OPEN的时候把所有数据取出来,FETCH只是一条一条的赋值,我跟踪过,OPEN的时候要等一会儿,而FETCH不需要,请指正。
      

  6.   

    我个人的认为是:oracle在open时将数据读到缓存中,以后fetch时就从缓存中读取数据,但如果数据量大的时候,不可能把所有数据都取到。  这样会有一个问题,如果多个事务同时打开这个游标,并且对游标中的数据进行了修改更新操作可能引起数据的不一致,我记得Sybase中有一种游标,如果其他事务对数据修改的话,可以反映到游标中来,估计它的实现应该是只取数据行的ID号,而后fetch时才从数据库中读取不知道理解的怎么样?
      

  7.   

    我只知道,在fetch的时候才取数据。顶
      

  8.   

    错了,实践出真知,实践一下就知道了,Open之后就已经缓存了,而且与其它会话无关,具体是怎么缓存的,怎么优化的,怎么控制数据流量的,就深层次得多了,可以作进一步研究。结婚。Open之后获取全部数据。
      

  9.   

    如果open之后要获取上万条数据,oracle也会都读到缓存中吗

    我决得还是有些蹊跷