프로젝트

tobe 시스템 오류 수정 : 날짜 형식 지정 오류

Format ends before the entire input string is converted

  • 이력조회 테이블 컬럼의 데이터타입 변경 : DATE -> TIMESTAMP
  • 해당 컬럼에 대해 검색할 때 TO_DATE()를 사용해서 에러났었음
  • TO_DATE() -> TO_TIMESTAMP() 로 변경
  • 운영 DB에 대기 테이블 생성 및 comment & 컬럼 데이터타입도 변경 완료 : Oracle how to copy a table

기존 시스템 화면 붙이기

  • 세번째 시스템 통계 4개 화면조회 완료
  • 달력 구분값 다른 에러 해결
  • 세번째 시스템의 큐브리드 쿼리를 ORACLE 형식으로 바꾸기
  • 팝업 검색기능 삭제, 변경

달력 구분값 화면마다 다른 문제 해결

  • 화면별로 달력 날짜 표시 방식이 '.'로 구분되는지, '-'로 구분되는지에 따라 쿼리 결과가 달라짐. 해당 설정을 저장하는 파일 확인해보니, 기존 시스템에 같은 이름의 파일이 두군데 있어 가져올 때 섞인 것으로 보임
  • 하나의 파일을 사용하도록 통일하고, 달력 표시 방식은 한글로 통일해주었음
  • 라이브러리 공식문서 : 설정파일에서 gsSplit 변수값으로 '.', '-' 등을 줄 수 있는데, 쿼리에서는 '.'을 기준으로 사용하고 있으므로 쿼리와 맞춰주었더니 검색 결과가 기존과 동일하게 나왔다.

큐브리드 쿼리를 ORACLE 형식으로 바꾸기

세번째 시스템은 큐브리드 DB를 사용하고 있어 쿼리를 tibero에 맞게 일부 수정해야 할 일이 몇 가지 있었다.

1. ORDERBY_NUM() -> ROWNUM

오라클 개발자를 위한 CUBRID 개발 안내
데이터베이스별 결과 제한 쿼리(top, rownum, Limit, inst_num, groupby_num, orderby_num)

  • DB마다 결과 제한 쿼리가 있는데, oracle의 rownum은 정렬 전 번호를 매기고, 큐브리드의 orderby_num은 정렬 후 번호를 매긴다고 한다. 즉 rownum을 대신 사용한다면 번호를 매긴 후 다시 정렬되기 때문에, rownum을 제한 기준으로 쓰기 위해서는 서브쿼리로 한번 더 감싸줄 필요가 있다.
    첫 번째 링크의 예시에는 rnum between 1 and 5로 사용했는데, 나는 결과가 원하는 대로 나오지 않아서 서브쿼리 안 rownum >=1, 서브쿼리 밖에서 rnum <=5 와 같이 시작점과 끝점을 따로 만들어 주었다.
-- 큐브리드
select bbs_id, title, reg_date
from board_data
order by bbs_id desc for orderby_num() between 1 and 5;

-- 티베로 (오라클)
select o.rownum as rnum, o.*
from (
    select bbs_id, title, reg_date, rownum
    from board_data
    where rownum >=1
) o
where o.rownum <=5

2. ADDDATE(), INTERVAL

-- 기존 쿼리
date <= ADDDATE(TO_DATE('2016.01.01', 'yyyy.MM.dd'), INTERVAL 24 HOUR)

-- 수정 쿼리
date <= TO_DATE('2016.01.01', 'yyyy.MM.dd') + INTERVAL '1' DAY
profile
문서화를 좋아하는 개발자

0개의 댓글