1
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必要?另外,当我执行 a FETCHon时,employee_rec我似乎遇到了错误,所以我猜它们彼此不同。

4

2 回答 2

7

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

换句话说:

FOR employee_rec in c1

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

因此,要参考monthly_income这一点,您必须说employee_rec.monthly_income,而不仅仅是单独说monthly_income

当我对 employee_rec 进行 FETCH

employee_rec 不是游标(它是一个变量),因此您不会从中获取。在这种情况下C1,for 循环隐式处理 fetch from,因此您不需要显式 fetch。

于 2013-03-21T12:25:04.697 回答
3

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

于 2013-03-21T12:24:06.940 回答