2

我在 Scott 模式中运行以下命令:

SET serveroutput ON;

BEGIN
FOR c_Emp IN (SELECT * FROM emp)
LOOP
dbms_output.put_line('The record processed by the cursor ' || c_Emp%rowcount);
END LOOP;
end;

这给出了错误:

游标属性可能不适用于非游标“C_EMP”

但是,如果这是使用显式游标完成的,它可以正常工作:

设置服务器输出;

DECLARE 
       emp_record emp%ROWTYPE; 
       count_variable NUMBER;
       CURSOR c IS 
SELECT * FROM emp;
BEGIN
OPEN c;
loop
fetch  c INTO emp_record;
exit WHEN c%notfound;
dbms_output.put_line ('The record count is   ' || c%rowcount);
END loop;
close c;
end;

只是想了解:在使用 CURSOR FOR LOOP 时,索引变量是否不是游标属性,如果是,为什么?有人可以解释一下吗....

4

3 回答 3

1

c_Emp不是游标,它是 SELECT 语句中每列的字段的记录

c_Emp 类似于emp_record你的第二个例子。

于 2013-08-28T08:57:00.783 回答
1

即使在使用 FOR 循环时,也必须显式定义游标。带有光标的 FOR 循环的示例使用如下所示:

declare
 cursor c1 is select a from table;
begin
 FOR b in c1
 loop
  <required logic>
 end loop;
end;
于 2013-08-28T11:24:06.507 回答
1

要在 for 循环中获取索引,可以在隐式游标的 select 子句中添加rownum伪列。

SET serveroutput ON;

BEGIN
  FOR c_Emp IN (SELECT e.*, rownum FROM emp e)
  LOOP
    dbms_output.put_line('The record processed by the cursor ' || c_Emp.rownum);
  END LOOP;
end;
于 2016-09-13T07:31:43.887 回答