Oracle存储过程游标始终返回零行
我将此光标放在包中的过程中:Oracle存储过程游标始终返回零行,oracle,plsql,Oracle,Plsql,我将此光标放在包中的过程中: 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;
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;
PROCEDURE CANCEL\u INACTIVE(天数\u旧编号)
是
光标处于非活动状态
从MY_表中选择*
状态改变的地方\u DATE您可能正在对非限制数据进行测试
或者:您没有根据rec.id提交更新
或者:您的更新不起任何作用。(目标表上的任何行都不满足where子句)您可能正在对非限制数据进行测试
或者:您没有根据rec.id提交更新
或者:您的更新不起任何作用。(目标表上的任何行都不满足where子句)您如何知道光标有零行?您是否在几天以前使用完全相同的查询进行了测试?我通过使用它的应用程序运行了该函数,但没有看到该函数的效果。然后,我通过在调试模式下编译并使用测试脚本逐步使用我使用的IDE完成代码来验证这一点。@Florin另外,我还使用声明的in_DAYS_OLD进行了测试。我还测试了它,只需在它的位置放置一个显式整数。我甚至用一个整数替换了过程本身的IN_DAYS_OLD,但仍然得到零行。您能在输入前使用dbms_输出。put_行('start')和dbms_输出。put_行(rec.id)进行测试吗在循环中?您如何知道光标有零行?您是否使用在_DAYS _OLD中完全相同的行测试了查询?我在使用该函数的应用程序中运行了该函数,但没有看到该函数的效果。然后,我通过在调试模式下编译并使用测试脚本逐步使用我使用的IDE完成代码来验证这一点。@Florin另外,我还使用声明的in_DAYS_OLD进行了测试。我还测试了它,只需在它的位置放置一个显式整数。我甚至用一个整数替换了过程本身的IN_DAYS_OLD,但仍然得到零行。您可以使用dbms_输出进行测试吗?输入前输入一行(“start”),然后在循环中输入一行dbms_输出。输入行(rec.id)?