2011-09-08 66 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

我很尷尬。這是未提交的數據... –