Oracle 11g vs 12c ํ์ด์ง ์ฟผ๋ฆฌ ๋ฌธ๋ฒ ์ฐจ์ด ์ ๋ฆฌ – OFFSET/FETCH vs ROW_NUMBER()
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 ๋ฒ์ ์ ๋ฐ๋ผ ํ์ด์ง ๋ฐฉ์์ ์ ์ ํ ์ ํํ๋ ๊ฒ์ด ์ค์