【发布时间】:2011-09-08 23:08:30
【问题描述】:
我在包中的一个过程中有这个光标:
PROCEDURE CANCEL_INACTIVE(IN_DAYS_OLD NUMBER)
IS
CURSOR inactive IS
SELECT * FROM MY_TABLE
WHERE STATUS_CHANGED_DATE <= TRUNC(SYSDATE-IN_DAYS_OLD)
AND CANCEL_CD IS NULL;
rec inactive%ROWTYPE;
BEGIN
OPEN inactive;
LOOP
FETCH inactive INTO rec;
EXIT WHEN inactive%NOTFOUND;
-- do an update based on rec.id
END LOOP;
END;
END CANCEL_INACTIVE;
每次我测试或运行程序时,inactive 总是有零行。但是,当我将 EXACT 相同的查询放入 SQL 窗口时,我得到了我正在寻找的行。
什么鬼?
【问题讨论】:
-
你怎么知道光标有零行?
-
您是否使用完全相同的 IN_DAYS_OLD 测试了查询?
-
我通过使用它的应用程序运行该函数,但没有看到该函数的效果。然后我通过在调试模式下编译并使用测试脚本在我使用的 IDE 中逐步执行代码来验证这一点。
-
@Florin 同样,我已经在声明 IN_DAYS_OLD 的情况下进行了测试。我还通过在其位置放置一个显式整数对其进行了测试。我什至用整数替换了过程本身中的 IN_DAYS_OLD,但我仍然得到零行。
-
你能在进入前用 dbms_output.put_line('start') 测试,在循环中用 dbms_output.put_line(rec.id) 测试吗?