타 시스템과 Interface 또는 Background Job을 수행하는 트랜잭션 같은 경우

그 이력을 확인하기 위해 Monitoring 프로그램을 개발하게 된다.

 

이러한 Monitoring 프로그램에서 빠질 수 없는 조건이 바로 Period 기간인데,

 

일반적으로는 해당 트랜잭션이 발생한 날짜( Date )만 조회 조건에 넣지만

분/초 단위로 수시로 수행하는 트랜잭션인 경우에는 시간( Time )까지 조회조건을 넣게 된다.

 

<날짜/시간 조회 화면>

 

날짜와 시간조건을 넣어달라는 개발 SPEC을 보고 항상 해오듯 의식의 흐름대로(?) 선택화면을 구현했다면, 위와 같이 구현을 했을 것이고, 데이터를 가져오는 부분 또한 의식의 흐름대로 SQL을 작성했다면 다음과 같을 것이다.

SELECT  ~
    FROM 트랜잭션 테이블 
 WHERE date  IN @s_date
       AND time  IN @s_time  ~

 


 

여기서 2가지 문제점이 있다. 

 

첫 번째는 선택화면( SELECTION SCREEN )의 시간( Time ) 조건에서

낮 13:00:00 ~ 새벽 01:00:00( 다음날 ) 와 같이 날이 넘어가서 HIGH 값이 LOW값보다 작아지는 경우 ,

 

SELECT-OPTIONS의 LOW값이 HIGH값보다 클 수 없다는 기본 스탠다드 유효성 점검에 의해 입력이 불가하다. 

 

 

두 번째, SQL 쿼리 문에서는 

위 SELECTION SCREEN 예시에 2023.01.01 15시 ~  2023.01.31 19시 의 데이터를 보고자 할 때,

예시와 같이 쿼리처럼 작성했다면,

 

2023.01.01 ~ 2023.01.31 기간 중에서 15시 ~ 19시 시간 사이의 데이터만 가져오게 된다. 

그 외 시간대 데이터는 누락하는 오류가 발생한다.

 


 

이럴 때는 SELECT-OPTIONS 이 아닌 PARAMETERS 를 이용, 날짜와 시간을 하나의 SET로 선택화면을 구현하면, 가시성도 좋고 스탠다드의 기본 유효성 체크 기능에서도 벗어날 수 있다. 

( 단, 조금 더 손이 간다는 단점은 있... )

 

< DATE와 TIME을 하나의 SET로 구성 >

 

SQL 쿼리문은 다음과 같이 해결 할 수 있다. 

SELECT  ~
    FROM 트랜잭션 테이블 
 WHERE ( date > @Start Date OR ( date = @Start Date AND time >= @Start Time )  ) 
       AND ( date < @End Date OR ( date = @End Date   AND time <= @End Time  )  ) .

 

 

 

+ Recent posts