Maximize Your Potential

BackEnd/HIS System

[병원 HIS] 외래채혈 혈액학검체 조회 화면 가접수 및 접수 통합목록추가

maxworld 2025. 6. 30. 22:53
728x90

[병원 HIS] 외래채혈 혈액학검체 조회 화면 가접수 및 접수 통합목록추가

 

병원 정보시스템(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>
 
 

✅ 이번에 다시 다잡은 핵심

  1. XML Mapper 경로와 statement ID는 무조건 두 번 확인!
    빌드 대상이 다르면 쿼리를 아무리 고쳐도 적용되지 않음.
  2. Dataset 구조와 ComboBox 값 전달 꼼꼼히 점검!
    옵션은 보이는데 값이 안 넘어가는 경우가 많음.
  3. 복잡한 조건은 decode()와 XML <isEqual>로 분기 깔끔하게!
    AND/OR 조건 꼬이면 원하는 데이터가 빠질 수 있음.
  4. SQL 로그 꼭 찍어보기!
    실제 화면에서 넘어가는 파라미터가 예상과 일치하는지 확인 필수.

병원 HIS는 XML Mapper, XPLATFORM Dataset, SQL 조건 이 세 가지가 하나로 딱 맞아야 실무자들이 원하는 정확한 데이터가 화면에 표시됩니다.