[英]Practical life examples of oracle explicit cursor use
我想不出在PL / SQL代码中使用显式游标的实际情况。 有人可以分享一些场景吗? 谢谢!
如果在程序单元中多次使用游标,则显式游标使您可以对SQL进行一次编码,这对维护很有利。
显式游标有两种明确的用例。
第一种是当我们想要探查记录的存在并在代码的主要流程中处理结果时:
open emp_cur (p_empno);
fetch emp_cur into l_emp_rec;
if emp_cur%notfound then
...
那时可能会更整洁
begin
select e.* into l_emp_rec
from emp e
where e.empno = p_empno;
....
exception
when no_data_found then
...
除了其他内容,我们程序的其他哪些部分可能会no_data_found
?
另一种情况是当我们要使用带有LIMIT子句的批量收集时(并且几乎可以肯定,我们在进行批量收集时要使用LIMIT子句)。 所以
open big_cursor;
loop
fetch big_cursor bulk collect into l_array limit 1000;
exit when l_array.count() = 0;
for idx in 1..l_array.count() loop
...
显式游标在我们的代码中引入了开销,因此它们被视为笨拙且效率低下。 但这并非总是如此。 实际上,如果我们使用隐式游标编写批量收集语句,Oracle将对其进行优化以使用值为100的LIMIT子句。这不是一个糟糕的默认值,但可能可以通过使用更高的值1000、5000获得更好的性能。 ,甚至10000。因此,我们超过LIMIT值的控件使使用显式游标值得。
简而言之,当我们乐于让Oracle做出控制决策时(在很多时候,Oracle很聪明),我们应该使用隐式游标。 但是,当我们需要对程序的行为进行控制时,应该使用显式游标。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.