병원 정보시스템(HIS)을 유지보수하다 보면 화면, 쿼리, XML Mapper가 하나로 딱 맞물려야 데이터가 제대로 출력됩니다. 이번에는 외래채혈실에서 사용하는 혈액학검체 조회 프로그램을 유지보수하면서 실제로 겪었던 시행착오와 그 과정을 통해 다시 다잡은 핵심 포인트를 기록해 보았습니다.
제가 맡았던 화면은 외래채혈실에서 환자별로 혈액학검체 이력을 조회할 수 있는 프로그램입니다. 화면은 XPLATFORM으로 되어 있고, 환자번호와 기간, 그리고 ‘검체구분’을 선택할 수 있는 ComboBox가 Dataset과 연동되어 있습니다. 선택된 옵션은 Oracle 쿼리로 전달되어 spcflag라는 코드값에 따라 전수, 채혈, 가검수 등으로 분기 처리되도록 되어 있었습니다.
✅ 구조 요약
- 화면(XPLATFORM)
ComboBox는 Dataset에 <Row><Col>로 관리하고 codecolumn, datacolumn으로 값을 넘깁니다. - 쿼리(Oracle)
decode()로 spcflag 조건을 분기하고, substr이나 between으로 기간 조건을 처리합니다. - XML Mapper
<statement id="getNSpclist">로 화면에서 넘어온 파라미터를 쿼리에 맵핑합니다.
<isEqual> 태그로 조건문을 유연하게 처리할 수 있습니다.
✅ 시행착오 기록
처음에는 쿼리만 고치면 끝날 줄 알았는데, 실제로는 쿼리를 계속 수정해도 조회 결과가 바뀌지 않았습니다.
알고 보니 같은 statement ID가 다른 XML에 여러 개 있어서 실제 호출 경로와 빌드 대상이 달라졌던 것이 원인이었습니다.
또 ComboBox는 화면에서 옵션은 잘 보이는데 실제로 SQL로 파라미터가 넘어가지 않는 문제도 있었습니다.
Dataset의 id/label 구조와 로드 모드(reverseusbrm) 설정이 꼬이면 UI는 멀쩡해도 DB 쿼리는 빈 값으로 날아갑니다.
게다가 spcflag = 5일 경우 전수와 가검수를 같이 조회해야 하는데, SQL AND/OR 조건이 꼬여서 일부 데이터가 누락되는 바람에 decode 분기와 XML 조건문(<isEqual>)을 다시 깔끔히 정리해야 했습니다.
✅ 예제 소스
아래는 실무에서 자주 쓰이는 Oracle 쿼리 + XML Mapper 예시입니다.
(실제 환자 데이터는 당연히 노출하지 않고 구조만 공유합니다.)
-- Oracle SQL
SELECT * FROM LISCHSBGD
WHERE pid = #{pid}
AND spcflag =
DECODE(#{spcflag}, '2', '2', -- 채혈
'3', '3', -- 가검수
'5', '2' || '3', -- 전수/가검수 동시 조회 시 예시
'0') -- 기본값
AND substr(regdate, 1, 8) BETWEEN #{fromDate} AND #{toDate}
<!-- XML Mapper 예시 -->
<select id="getNSpclist" parameterClass="hashmap" resultClass="hashmap">
SELECT *
FROM LISCHSBGD
WHERE pid = #pid#
<isEqual property="spcflag" compareValue="2">
AND spcflag = '2'
</isEqual>
<isEqual property="spcflag" compareValue="3">
AND spcflag = '3'
</isEqual>
<isEqual property="spcflag" compareValue="5">
AND (spcflag = '2' OR spcflag = '3')
</isEqual>
AND substr(regdate, 1, 8)
BETWEEN #fromDate# AND #toDate# </select>
✅ 이번에 다시 다잡은 핵심
- XML Mapper 경로와 statement ID는 무조건 두 번 확인!
빌드 대상이 다르면 쿼리를 아무리 고쳐도 적용되지 않음. - Dataset 구조와 ComboBox 값 전달 꼼꼼히 점검!
옵션은 보이는데 값이 안 넘어가는 경우가 많음. - 복잡한 조건은 decode()와 XML <isEqual>로 분기 깔끔하게!
AND/OR 조건 꼬이면 원하는 데이터가 빠질 수 있음. - SQL 로그 꼭 찍어보기!
실제 화면에서 넘어가는 파라미터가 예상과 일치하는지 확인 필수.
병원 HIS는 XML Mapper, XPLATFORM Dataset, SQL 조건 이 세 가지가 하나로 딱 맞아야 실무자들이 원하는 정확한 데이터가 화면에 표시됩니다.
'BackEnd > HIS System' 카테고리의 다른 글
[병원 HIS] 국가명(국적명) 공통코드 가나다순 정렬 적용하기 (0) | 2025.07.16 |
---|---|
[병원 HIS] 건강증진센터 진료내역 수정요청 쿼리 정리 (0) | 2025.07.15 |
[병원 HIS] CVR(이상결과보고) 기본설정 하드코딩 → 함수 호출로 개선하기 (1) | 2025.07.14 |
[병원 HIS] 재고관리 출력버튼 추가 개발 기록 (2) | 2025.07.11 |
[병원 HIS] 신장실당직 프로그램 Free Text 추가 (0) | 2025.07.04 |