2013-04-22 4 views
-1

웹 사이트의 페이지 행을 선택할 C# 코드에서 oracle 데이터베이스 요청을 작성해야합니다. 예를 들어 두 번째 페이지에 대해 100에서 200까지의 행을 얻으 려합니다. 나는 변화가 랩 내부에이 블록은페이징 (오라클 데이터베이스)

SELECT * FROM ORDERS WHERE CustomerID LIKE 'A%' 
ORDER BY OrderDate DESC, ShippingDate DESC 

하지만 어떻게 작동합니까 때, 나는 그것을 사용할 수있는 실제 어떤 작품

그것은 작동
SELECT * FROM 
(
    SELECT a.*, rownum r__ 
    FROM 
    (
     SELECT * FROM ORDERS WHERE CustomerID LIKE 'A%' 
     ORDER BY OrderDate DESC, ShippingDate DESC 
    ) a 
    WHERE rownum < ((pageNumber * pageSize) + 1) 
) 
WHERE r__ >= (((pageNumber-1) * pageSize) + 1) 

몇 가지 코드를 발견? 나는 이해할 수 없다. 나는 SQL 요청을 잘 알고있어하지만

SELECT a.*, rownum r__ 

무엇이며 랩 FROM 후

) a 

무엇인가?

이 포장을 설명해 주실 수 있습니까?

+0

또한'optimizer_mode = FIRST_ROWS'를 설정하면 도움이 될 수 있습니다. 또한 그 목적을 위해'row_number()'분석 함수를 살펴볼 것을 권한다. – haki

답변

1

선택. *, rownum -> 테이블/테이블 별명 a의 모든 레코드를 rownumber와 함께 선택하여 하위 집합을 선택할 수 있습니다.

가 작성

(CustomerID를 LIKE 'A %'주문일 DESC BY ORDER, ShippingDate DESC는 WHERE ORDERS SELECT * FROM) '는'당신은 외부 선택 테이블의 테이블로 취급 할 수 있도록 테이블 별칭으로 .

참고로 테이블 구조를 변경하면 코드가 손상 될 수 있으므로 *는 나쁜 습관이라고 간주됩니다.

+0

[SELECT 문의 FROM 절에있는 하위 쿼리는 인라인보기라고도합니다.] (http://docs.oracle.com/cd/E11882_01/server.112/e26088/queries007.htm) –

+0

선택에 대한 좋은 아이디어 * 테이블 구조에서 뭔가를 바꿀 때 코드가 깨집니다. 그리고 대답에 감사드립니다. 모든 것이 조금 더 명확 해집니다 =) – Vitalii