2011-09-08 69 views
1

我有这样的光标在一过程中的包:Oracle存储过程光标总是返回零行

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; 

每次测试或运行该过程,无活性总是具有零行。但是,当我将相同的查询放入SQL窗口时,我得到了我正在查找的行。

这是什么?

+1

你怎么知道游标有零行? –

+0

您是否使用完全相同的IN_DAYS_OLD测试了查询? –

+0

我通过使用它的应用程序运行函数,但没有看到函数的效果。然后,我通过在调试模式下进行编译并使用测试脚本来逐步验证使用的IDE代码,从而验证了这一点。 –

回答

6

可能您正在测试未提供的数据。

或者:你没有提交基于rec.id的更新。

或者:您的更新什么都不做。 (where子句不满足目标表上的任何行)

+1

我很尴尬。这是未提交的数据... –