Oracle 中的 for 循环后变量丢失值 PL/SQL

Variable loses value after for loop in Oracle PL/SQL

我在 Oracle SQL 中编写了以下脚本:

    CREATE OR REPLACE FUNCTION working_time
RETURN INT
IS
diff INT;
sum_ INT;
CURSOR cur IS SELECT * FROM users_;
BEGIN
sum_ := 0;
FOR usr IN cur LOOP
    SELECT SUM(NVL(end_, CURRENT_DATE) - start_)
    INTO diff
    FROM experience
    WHERE user_ = usr.id_;

    sum_ := sum_ + diff;

    IF usr.id_ != 100 THEN
    DBMS_OUTPUT.PUT_LINE('User ' || usr.first_name || ' ' || usr.last_name || ' has worked for ' || diff || ' days.');
    END IF;

    DBMS_OUTPUT.PUT_LINE('return: ' || sum_);
END LOOP;

DBMS_OUTPUT.PUT_LINE('return: ' || sum_);
RETURN sum_;
END working_time;

for循环内sum_的值打印正确,但在循环外什么都不打印。该变量是在 for 循环之前声明的,所以我不明白发生了什么。任何人都可以解释如何修复它以及为什么会这样吗?

编辑:发布完整代码

好的,我发现问题所在:

在某些情况下 diff 不是数字(这是最后一种情况,所以我认为是 for 循环的原因)。

将代码更改为

sum_ := sum_ + NVL(diff, 0);

解决了问题。