안녕하세요.
오라클 퀴즈를 공부하고 있는 학생입니다.
MODEL절 공부중 의문점이 있어서 실례를 무릎쓰고 글을 올립니다.
WITH t AS
(
SELECT 3 no1, TO_NUMBER(null) no2, TO_NUMBER(null) no3, TO_NUMBER(null) no4, 4 no5 FROM dual
UNION ALL SELECT null, null, null, null, null FROM dual
UNION ALL SELECT null, null, 2, null, null FROM dual
UNION ALL SELECT null, null, null, 5, null FROM dual
UNION ALL SELECT null, null, null, 6, null FROM dual
)
SELECT *
FROM t
MODEL
DIMENSION BY (ROWNUM rn)
MEASURES (no1, no2, no3, no4, no5)
RULES
(
no1[any] = NVL(no1[cv()], COALESCE(no5[cv()-1], no4[cv()-1], no3[cv()-1], no2[cv()-1], no1[cv()-1]))
, no2[any] = NVL(no2[cv()], no1[cv()])
, no3[any] = NVL(no3[cv()], no2[cv()])
, no4[any] = NVL(no4[cv()], no3[cv()])
, no5[any] = NVL(no5[cv()], no4[cv()])
)
;
위의 쿼리중에서
no1[any] = NVL(no1[cv()], COALESCE(no5[cv()-1], no4[cv()-1], no3[cv()-1], no2[cv()-1], no1[cv()-1]))
이 부분을 no1[any] = NVL(no1[cv()], no5[cv()-1])로 고치면 결과가 다르게 나오던데
이유가 몬지 도통 모르겠습니다.
제가 이해한 CV()함수는 디멘션을 기준으로 메저 값을 불려오는 것인데
만약 no5[cv()-1] 이렇게 했을 경우 첫번째줄에서 no5에 값을 저장 되기 때문에
그 다음부터는 no5[cv()-1] 이렇게 사용했을 경우 값이 있어야 한다고 생각하는 데
제 예상과 다르게 null이 나옵니다.
이유가 너무 궁금합니다.