2011-10-03 6 views
2

에서의 특정 셀을 수정 한 후 잠겨지고 내가 가지고있는 프로 시저를 호출 할 때 OUT 매개 변수행은 오라클

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; 

로 커서 (r_cursor를) 반환하는 오라클 프로 시저에 다음 코드 오라클의 모든 것은 완벽하게 작동합니다.

.Net 응용 프로그램에서 프로 시저를 호출하면 오류 ORA-24338: statement handle not executed이 발생합니다. 많은 테스트 후

, 나는 내가 UPDATE 문에서 SELECT 문 또는 u.token = NULL,에서 라인 lower(u.token) = lower(p_IV) 중 하나를 제거하면, 커서가 오류없이 닷넷 응용 프로그램에 반환되는 것을 찾을 수 있습니다.

+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에 블록 (예 : WHEN OTHERS)이 있습니까? 또는 .net에서 SQL 예외를 catch합니까?

+0

예외 처리가 완료되었습니다. 이상한 부분은 동일한 매개 변수가 오라클 측면에서 테스트되고 결과 커서가 100 % 정확하다는 것입니다. – Michel