Pl / SQL循环遍历游标的值

时间:2013-03-21 12:19:33

标签: 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;

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

2 个答案:

答案 0 :(得分:7)

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

换句话说,

FOR employee_rec in c1

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

所以要引用monthly_income,你必须自己说employee_rec.monthly_income而不只是monthly_income

  

当我在employee_rec上执行FETCH时

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

答案 1 :(得分:3)

您不是“遍历值”,而是循环遍历光标返回的记录。在您的情况下,您的记录只包含一个字段 - monthly_income - 但一般来说,记录可以包含许多字段,您可以在每次循环迭代中使用这些字段。