为啥我们不需要在 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 循环中打开和获取显式游标?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用PL / SQL更改您在FOR循环IN子句中查询的表

使用 FETCH 的 PL/SQL 游标 FOR 循环

PL/SQL 在 for 循环中执行即时异常处理

PL/SQL 将行存储到变量中并在 for 循环中使用它们

Pl/Sql 在for循环中打开游标

为啥我们不能在 PL SQL 中一次获取多个值?