普通cursor与REF cursor的一些区别,各位大侠能不能举相关的实际的例子和情况来分析一下下面的情况,谢谢!1)PL/SQL静态光标不能返回到客户端,只有PL/SQL才能利用它。ref光标能够被返回到客户端,这就是从Oracle的存储过程返回结果集的方式。 
这个怎么理解呢?为什么静态光标不能返回到客户端,REF可以呢?2)PL/SQL静态光标可以是全局的,而ref光标则不是。 也就是说,不能在包说明或包体中的过程或函数之外定义ref光标。 只能在定义ref光标的过程中处理它,或返回到客户端应用程序。
能有一个具体的例子看看么?3)ref光标可以从子例程传递到子例程,而光标则不能。 为了共享静态光标,必须在包说明或包体中把它定义为全局光标。 因为使用全局变量通常不是一种很好的编码习惯,因此可以用ref光标来共享PL/SQL中的光标,无需混合使用全局变量。
能有一个具体的例子看看么?最后,使用静态光标--通过静态SQL(但不用ref光标)--比使用ref光标效率高;
而ref光标的使用仅限于以下几种情况:
把结果集返回给客户端;
在多个子例程之间共享光标(实际上与上面提到的一点非常类似);
没有其他有效的方法来达到你的目标时,则使用ref光标,正如必须用动态SQL时那样;

解决方案 »

  1.   

    推薦一個pdf文檔  你可以在csdn下載區找到  “PLSQL基础.pdf”
      

  2.   

    楼主提的第一个问题,虽然我也经常用oracle开发,确实没有仔细考虑过这个问题,
    现在仔细想想,我觉得oracle的这种设计是为了进行更好的内存管理吧,静态的游标
    所使用到的空间是不能被第三方来释放的,而ref游标(返回结果集)则是可以有第三方
    控制释放,这样不会导致内存泄漏。
    这样也可以解释为什么ref cursor不能是全局的,只能是个局部变量,因为它可能被别人释放掉。至于例子,楼主自己去网上找找,应该很多。期待牛人下最后结论。