이렇게 만들려고 하면 어떻게 해야 하나요?
qty가 4이면 1,2,3,4로 만들어 내는 sql 입니다.
WITH t AS ( SELECT 'PPU' prod, 1111 no, 4 qty FROM dual UNION ALL SELECT 'PPU', 5555, 1 FROM dual UNION ALL SELECT 'PPU', 7777, 3 FROM dual ) SELECT prod, no, qty, lv FROM t , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL < 99) WHERE lv <= qty ORDER BY prod, no, lv ;
qty의 범위가 어떻게 되나요?
예를 들어 qty의 범위가 1~10 정도면 별 문제가 없을 것입니다.
또한 qty의 범위가 10000 ~ 15000 정도라면
역시 너무 많은 행이 생성되기 때문에 성능을 높일 방법이 어차피 없을 것입니다.(원본 테이블 데이타가 많다면..)
그런데
만약 qty가 대부분 1~10 정도 이지만 예외적으로 1000이 되는 경우도 있다면
위의 sql은 level < 1001 이상이 되어야 하는데요...
그러면 성능에 문제가 생길 수도 있습니다.
물론 대부분의 경우 위의 마농님 말씀대로 하시는 것이 상대적으로 가장 성능이 좋습니다.
그런데 질문자님의 질문이 앞의 연속된 질문의 연장선 상에 있다면 order 테이블이 500000건 정도이고
원본 쿼리의 시도가 level < 10000 으로 되어 있는 것으로 보아 qty 데이타가 취할 수 있는 범위에 대하여 고려를 하셔야 할 것 같습니다.
제가 알기 쉽게 아래에 예제를 첨부하였습니다.
먼저 다음과 같이 테이블을 만듭니다.