::김정균 님께서 쓰시길::
> select id,paperdate,title from TABLE where to_char(paperdate) = '03-MAR-95';
>
> 의 결과에서 rownum 이 10-20 인넘들만 보여주고 싶습니다. 그래서 한것이
> select id, paperdate, title from TABLE
> where to_char(paperdate) = '03-MAR-95' and rownum between 10 and 20;
>
> 으로 했지요. 그랬더니 결과가 안나오더군요. 먼가 제가 잘못한 것이
> 있는것 같은데 먼지 모르겠습니다. :-) 조언을...
당연히 나오지 않습니다. rownum은 fetch한 row 중에서 번호를
매기는 것입니다. 당연히 1번째 데이타를 fetch 했으면 rownum는 반드시
1 이 되는데 조건절에서 rownum > 10 있기 때문에 항상 거짓이 되고
당연히 한건도 나오지 않습니다.
> select id, paperdate, title from TABLE
> where to_char(paperdate) = '03-MAR-95' and rownum between 0 and 20;
>
> 으로 하면 결과값이 제대로 나오더군요.
항상 rownum은 작다라고만 사용해야 합니다.
성능이 문제가 되지 않는다면 Inline view를 사용하여
다음과 같이 할 수 있습니다. 그리고 칼럼에 가능하면 함수를
사용하지 말고 변수에 사용해야 하며, 최대한 바인드 변수를
사용하는 것이 좋습니다.
그리고 Y2K를 위해서 연도는 가급적 4자리를 사용하시는 것이...
select id, paperdate, title
from ( select id, paperdate, title, rownum row_no from TABLE
where paperdate between to_date('03-MAR-95', 'DD-MON-RR' )
and to_date('03-MAR-95', 'DD-MON-RR' ) + 0.99999)
where row_no between 10 and 20
;
그러나 절차적인 언어로 개발하는 중이라면
1~10은 skip 하고 지나가는 것이 더 낫지 않나요?
|