DB Version : Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit Production
아~ 짜증나!
오늘 하루도 기분이 안 좋아~
이 포스트나 빨리 적고 나의 미래에 대해 심히 다시 생각을 해봐야겠다.
하지만 지금 당장은 먹고 살기 바쁘니 이 포스트를 적어넣고 담에 편하도록 노력해야지.
우선 쿼리를 보면,
UPDATE (SELECT *
FROM TBL_TESTRANK
where COL1 = 'GroupCol1_01'
and COL2 = 'GroupCol2_01') A
SET (A.RANK) = (
SELECT rum
FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY ChangeCol) rum
, COL1
, COL2
, COL3
FROM TBL_TESTRANK
where COL1 = 'GroupCol1_01'
and COL2 = 'GroupCol2_01'
) B
WHERE A.COL1 = B.COL1
and A.COL2 = B.COL2
and A.COL3 = B.COL3
)
TBL_TESTRANK 라는 테이블의 RANK 컬럼의 값을 업데이트하는 쿼리이다.
간단하게 설명하면,
컬럼 COL1,2 그룹에 속한 데이터들을 찾아서.
컬럼 ChangeCol 의 정렬(Order by) 방식에 따라 ROW_NUMBER() 의 값을
RANK 컬럼에 업데이트한다는 말이다.
결국,
컬럼 ChangeCol 의 값이 바뀌면 RANK 컬럼의 값도 바껴야 하는 경우나 RANK 컬럼이 다른 컬럼의 변화에 민감한(의존적인)인 경우 이 쿼리가 사용된다는 것이다.
그런데 여기서 생각해 보자.
만약 대용량 데이터라고 한다면 과연 이 처리방식은?
이런 삽질은 대체 왜?
나의 푸념을 더 늘어놓는다면,
우선 초창기, 설계가 이런 경우를 생각하지 못하고 설계되었다는 것이다.
뭐 설계 당시 컬럼 ChangeCol 이 아니라 컬럼 StaticCol 로 설계되어진 것일수도 있다.
이리저리 개발하다가 바뀐 경우는 허다하니깐.
하지만 유지보수면에서 봤을 때, 관리를 하기 힘든 인터페이스나 기타 등등 같은 경우 결국 저런 헛짓거리 쿼리를 사용해야 한다는 것이다.
IT 가 왜 경력이 중요한지 아는가?
워낙에 설계, 개발, 테스트, 유지보수 단계에서 괴상하고 생각치 못한 일들이 많아서 신입들은 처리가 어려울때, 한번이라도 이런 비슷한 일로 고생한 적이 있는 경력자들은 그나마 육체적 정신적 데미지가 적어 신입보다는 빨리 처리한다는 것이다.
결론 : 나는 현재 기분이 안 좋다.
댓글 없음:
댓글 쓰기