๐Ÿ’พ DB_

Oracle 11g vs 12c ํŽ˜์ด์ง• ์ฟผ๋ฆฌ ๋ฌธ๋ฒ• ์ฐจ์ด ์ •๋ฆฌ – OFFSET/FETCH vs ROW_NUMBER()

CodeLoge 2025. 4. 29. 23:52

Oracle ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋ฒ„์ „๋ณ„๋กœ ํŽ˜์ด์ง• ์ฟผ๋ฆฌ ๋ฐฉ์‹์— ์ฐจ์ด๊ฐ€ ์žˆ์Œ

ํŠนํžˆ Oracle 12c ์ด์ƒ์—์„œ๋Š” OFFSET/FETCH ๋ฌธ๋ฒ•์ด ๋„์ž…๋˜์–ด ํŽ˜์ด์ง• ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ„๋‹จํ•ด์ง

Oracle 11g ์ดํ•˜์—์„œ๋Š” ์ด๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•„ ROW_NUMBER()๋ฅผ ํ™œ์šฉํ•œ ์„œ๋ธŒ์ฟผ๋ฆฌ ๋ฐฉ์‹์œผ๋กœ ํŽ˜์ด์ง•์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ

 

โœ… Oracle 12c ์ด์ƒ – OFFSET / FETCH ๋ฐฉ์‹

SELECT ...
FROM VIEW_PRODUCT_COMBO
ORDER BY TOTAL_SALES DESC
OFFSET ? ROWS FETCH NEXT ? ROWS ONLY;

 

๊ฐ„๊ฒฐํ•จ : ์ง๊ด€์ ์œผ๋กœ OFFSET๊ณผ FETCH๋กœ ์‹œ์ž‘ ์œ„์น˜์™€ ๋ฒ”์œ„๋ฅผ ์ง€์ •

๊ฐ€๋…์„ฑ ์ข‹์Œ : ์‹ค์ œ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ ๊ณ„์‚ฐ๋งŒ ์ž˜ ํ•˜๋ฉด ๊น”๋”ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

๋‹จ์  : 11g ์ดํ•˜์—์„œ๋Š” ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ ๋ฐœ์ƒ

 

โœ… Oracle 11g ์ดํ•˜ – ROW_NUMBER() ๋ฐฉ์‹

SELECT ...
FROM (
  SELECT ..., ROW_NUMBER() OVER (ORDER BY TOTAL_SALES DESC) RN
  FROM VIEW_PRODUCT_COMBO
)
WHERE RN BETWEEN ? AND ?;

 

 

ํ˜ธํ™˜์„ฑ : Oracle 10g/11g ๋“ฑ ๊ตฌ๋ฒ„์ „์—์„œ๋„ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๋ณต์žกํ•จ : ์„œ๋ธŒ์ฟผ๋ฆฌ์™€ RN ๋ณ„์นญ์„ ํ™œ์šฉํ•ด์•ผ ํ•จ

์ฃผ์˜์  : BETWEEN ์ ˆ์— ๋“ค์–ด๊ฐˆ ๊ฐ’์€ ์‹œ์ž‘ ์ธ๋ฑ์Šค, ๋ ์ธ๋ฑ์Šค์ด๋ฉฐ, ์ง์ ‘ ๊ณ„์‚ฐ ํ•„์š” (์˜ˆ: ํŽ˜์ด์ง€ 2๋ฒˆ์ด๋ฉด RN 11~20)

 

๋‘ ๋ฐฉ์‹ ๋ชจ๋‘ ์žฅ๋‹จ์ ์ด ์žˆ์œผ๋ฏ€๋กœ, ์‚ฌ์šฉํ•˜๋Š” DB ๋ฒ„์ „์— ๋”ฐ๋ผ ํŽ˜์ด์ง• ๋ฐฉ์‹์„ ์ ์ ˆํžˆ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”