为啥我们不需要在 pl sql 的 for 循环中打开和获取显式游标?
Posted
技术标签:
【中文标题】为啥我们不需要在 pl sql 的 for 循环中打开和获取显式游标?【英文标题】:why we don't need to open and fetch explicit cursor in for loop in pl sql?为什么我们不需要在 pl sql 的 for 循环中打开和获取显式游标? 【发布时间】:2015-12-07 09:14:02 【问题描述】:我想知道为什么我们不需要像这样在 pl sql 的 for 循环中打开和获取显式游标:
declare
REC EMPLOYEES%ROWTYPE;
cursor emp_cur is select * from employees;
begin
FOR rec in emp_cur loop
SYS.DBMS_OUTPUT.PUT_LINE('fname' || REC.FIRST_NAME );
end loop;
END;
谢谢
【问题讨论】:
因为是Oracle规则。如果您有FOR
游标循环 - 您无需打开 fetch 并关闭它...
其实ORACLE会在内部处理OPEN、FETCH、CLOSE,以防出现FOR循环。
您必须将 PL/SQL 编译器视为获取高级指令并为您生成代码,在这种情况下包括所有游标处理。它隐含地为你做了很多其他的事情——它非常聪明。
【参考方案1】:
因为CURSOR FOR LOOP 会隐式执行 OPEN、FETCH 和 CLOSE。这就是为什么这些游标称为implicit
对于 select_statement,PL/SQL 声明、打开、获取和关闭隐式游标。
见here
【讨论】:
以上是关于为啥我们不需要在 pl sql 的 for 循环中打开和获取显式游标?的主要内容,如果未能解决你的问题,请参考以下文章