2011-10-03 217 views
2

在它修改某個小區後鎖定我有Oracle過程,它返回一個光標(r_cursor),爲OUT參數行是越來越在Oracle

SELECT userid 
     INTO v_userid 
     FROM users u 
    WHERE lower(u.email) = lower(p_email) 
     AND lower(u.token) = lower(p_IV); 

UPDATE users u 
    SET u.token = NULL, 
     u.lastlogin = sysdate() 
WHERE u.userid = v_userid; 

    OPEN r_cursor FOR 
    SELECT u.firstname, 
      u.lastname 
     FROM users u 
    WHERE u.userid = v_userid; 

當調用的程序在下面的代碼從甲骨文一切工作都很好。

但是,當從.Net應用程序調用該過程時,會引發錯誤ORA-24338: statement handle not executed

大量的測試後,我發現,如果我刪除從UPDATE聲明SELECT陳述或u.token = NULL,lower(u.token) = lower(p_IV)之一,光標返回到.NET應用程序沒有任何錯誤。

+0

當您調用存儲過程或使用從存儲過程返回的遊標時是否發生錯誤?前者表示OPEN語句從未執行,或者.NET中定義的參數混淆。後者表示在達到它的末尾時從光標中取出,可能是因爲光標根本沒有返回任何行。 – Codo

+0

使用返回的遊標填充數據集時發生錯誤。 oCon.Open(); oCmd.ExecuteNonQuery(); oDA.Fill(dsCustomer); oDA.Dispose(); 以及對於數據來說,由於oracle過程本身工作正常並返回好結果,所以肯定會返回數據。 – Michel

回答

0

當您試圖獲取尚未打開的遊標時,通常會引發ORA-24338

例如,如果您的過程在OPEN語句之前引發異常,則可能會引發此問題。之後,當您嘗試從光標讀取時,oracle會引發ORA-24338,因爲光標從未打開過。

你在PL/SQL中是否有EXCEPTION塊(例如WHEN OTHERS),或者你在.net中捕獲到SQL異常?

+0

異常處理完成.net端。奇怪的部分是相同的參數測試甲骨文方面和導致的光標是100%正確的。 – Michel