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我似乎得到一个错误,所以我猜他们彼此不同.
您正在循环结果集中的记录.
换一种说法:
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循环隐式处理,因此不需要对您进行显式提取.
| 归档时间: |
|
| 查看次数: |
12513 次 |
| 最近记录: |