Pl/SQL循环遍历游标的值

Cem*_*mre 1 oracle plsql

CREATE OR REPLACE Function TotalIncome
   ( name_in IN varchar2 )
   RETURN varchar2
IS
   total_val number(6);

   cursor c1 is
     select monthly_income
     from employees
     where name = name_in;

BEGIN

   total_val := 0;

   FOR employee_rec in c1
   LOOP
      total_val := total_val + employee_rec.monthly_income;
   END LOOP;

   RETURN total_val;

END;
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我被告知我们正在循环遍历值,但我不理解的是,如果我们循环遍历值,为什么有employee_rec.monthly_income必要?此外,当我做一个FETCHon employee_rec我似乎得到一个错误,所以我猜他们彼此不同.

Daz*_*zaL 7

您正在循环结果集中的记录.

换一种说法:

FOR employee_rec in c1
Run Code Online (Sandbox Code Playgroud)

表示打开游标c1并对其执行提取.对于找到的每一行,将行记录分配给一个名为的记录变量employee_rec.

所以要参考monthly_income,你必须说employee_rec.monthly_income,而不仅仅是monthly_income它自己.

当我在employee_rec上做一个FETCH时

employee_rec不是游标(它是一个变量),所以你不能从中获取它.在这种情况下,fetch C1将由for循环隐式处理,因此不需要对您进行显式提取.