2014-06-06 2 views
-3

Oracle 데이터베이스에 ID가 있고 연도를 나타내는 날짜가있는 테이블이 있습니다.SQL 쿼리가 때때로 값을 반환하지 않습니다.

public static Period Get_Last_Period() 
    { 
     DataRow dr = Get_DataRow_InLineSQL("SELECT * FROM PERIODS WHERE ROWNUM = 1 ORDER BY PERIOD_ID DESC"); 

     Period iPeriod = new Period(dr); 
     return iPeriod; 
    } 

문제는 가끔 무작위로는 DataRow를위한 "널 (null)"값을 반환한다는 것입니다 :

지금, 나는 테이블의 마지막 기간을 선택하는 C# 코드가 있습니다. 이것이 왜 일어날 수 있는지에 대한 아이디어가 있습니까?

+1

'Get_DataRow_InLineSQL'이란 무엇입니까? – gunr2171

+0

난 당신이 0 행을 반환하는 것 같아요. ROWNUM = 1로 돌아 오는 뭔가가 항상 존재합니까? 또는 테이블이 삭제됩니까? 이 원인이 될 수있는 요소가 너무 많습니다. 더 많은 정보가 필요합니다. – alykins

답변

1

테이블에서 임의의 레코드를 선택하고 있습니다. WHERE ROWNUM = 1 유일한 기준으로 dbms 그냥 모든 레코드를 선택하고 거기서 그만 알려줍니다. 그런 다음 효과가없는 period_id로이 레코드 하나를 주문합니다. 왜냐하면 하나의 단일 행의 정렬 순서를 변경할 수 없기 때문입니다.

때때로 쿼리가 null 레코드를 반환하면 테이블에 null 레코드가 있고 dbms가이 레코드를 선택한다는 의미입니다. 그게 다야.

SELECT * FROM (SELECT * FROM PERIODS ORDER BY PERIOD_ID DESC) WHERE ROWNUM = 1 

편집 : 당신이 정렬이 처음 발생 후 가장 많은 행을 선택하려면

, 당신은 당신의 쿼리를 변경해야는 null 값을 생성하여 C# 코드이기 때문에, 내 위의 대답은 정확하지 않지만 관련이있을 수 있습니다. 기간은 무엇입니까? DataRow를 생성하는 생성자가있는 클래스입니다. 내가 아는 한 생성자는 실패 할 수 있지만 예외가 발생하거나 인스턴스가 생성되지만 null이 될 수는 없습니다. 그래서 : 아니, 여기서 무슨 일이 일어날 지 모르겠다. 위의 설명에 위의 쿼리를 사용하면 생성자가 얻는 DataRow에서 수행하는 작업을 쉽게 찾을 수 있습니다.

관련 문제