普通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时那样;
这个怎么理解呢?为什么静态光标不能返回到客户端,REF可以呢?2)PL/SQL静态光标可以是全局的,而ref光标则不是。 也就是说,不能在包说明或包体中的过程或函数之外定义ref光标。 只能在定义ref光标的过程中处理它,或返回到客户端应用程序。
能有一个具体的例子看看么?3)ref光标可以从子例程传递到子例程,而光标则不能。 为了共享静态光标,必须在包说明或包体中把它定义为全局光标。 因为使用全局变量通常不是一种很好的编码习惯,因此可以用ref光标来共享PL/SQL中的光标,无需混合使用全局变量。
能有一个具体的例子看看么?最后,使用静态光标--通过静态SQL(但不用ref光标)--比使用ref光标效率高;
而ref光标的使用仅限于以下几种情况:
把结果集返回给客户端;
在多个子例程之间共享光标(实际上与上面提到的一点非常类似);
没有其他有效的方法来达到你的目标时,则使用ref光标,正如必须用动态SQL时那样;
解决方案 »
- 请教创建oracle数据库id主键自动递增的写法
- 在java程序中调用oracle数据库里面存储过程时报错
- Sql Loader 问题,紧急求助,给分100,在线等,谢谢~!
- 怎样用DATE型只存时间不要日期
- 问一个奇怪的问题,关于select
- 在线高分求救:索引AEWS.PK_TS_ITEMVALUE无法通过5394(在表空间AEWS中)扩展
- 小弟向各位高手请教(急急急)
- 如果要UPDATE的内容被其他用户锁定,UPDATE语句会一直处于等待状态,请问如何让他能马上返回错误信息
- Help!用oracle临时表时遇到的一个问题,急!
- 视图爆无效数字
- Oracle游标循环取值,值再做作比较!
- 我在proc中使用了UNION语句,当其中一个SELECT未查出结果时,sqlcode返回SQL_EOS.
现在仔细想想,我觉得oracle的这种设计是为了进行更好的内存管理吧,静态的游标
所使用到的空间是不能被第三方来释放的,而ref游标(返回结果集)则是可以有第三方
控制释放,这样不会导致内存泄漏。
这样也可以解释为什么ref cursor不能是全局的,只能是个局部变量,因为它可能被别人释放掉。至于例子,楼主自己去网上找找,应该很多。期待牛人下最后结论。