C 를 먼저 세 봤다 — 25,488건이 걸린다. "레거시 그대로"는 선택지가 아니다
CodMtiSeq=0 행이 2개 이상인 내원: 25,488건, 최대 41행. 0건이면 없는 문제였겠지만 아니었다. 41행짜리 내원에서 ORDER BY 없는 Rows(0) 은 사실상 무작위다. 레거시는 지금도 그 25,488건의 담당의를 확정적으로 찍지 못하고 있다 — 재현할 대상 자체가 없으므로 "그대로 옮긴다"가 성립하지 않는다. 정황이 하나 더 있다. 레거시는 GetCodInfDT 에 적용일시를 넘기면서도 그것으로 P_CodInf 를 거르지 않는다(넘긴 날짜는 마스터 유효기간 조인에만 쓴다). P_CodInf 에 CodStrDtm/CodEndDtm 이 있는데 WHERE 에 없다 — "그 시점의 진료과"를 뽑으려던 의도가 반쯤만 구현된 것으로 보인다. 측정 코드는 진단에 남겼다. 세기 전에는 A 와 B 중 어느 쪽인지 알 수 없었다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
3e9f50ee52
commit
942780ae97
@@ -2153,6 +2153,21 @@ public static class DbSmoke
|
||||
$"{normalized.Length}자 — 복호화 실패나 컬럼 부재를 의심할 것");
|
||||
Check("㉑ 그 번호에서 성별이 나온다", sex is "M" or "F", $"'{sex}'");
|
||||
}
|
||||
|
||||
// ── OCM_담당의사 배치의 선행 조사 ──
|
||||
// 레거시 GetCodInfDT 는 ORDER BY 없이 CodMtiSeq='0' 만 걸고
|
||||
// 호출부가 Rows(0) 을 집는다. 한 내원에 그런 행이 둘 이상이면
|
||||
// <b>오라클이 어느 행을 먼저 주느냐에 따라 담당의가 달라진다</b>.
|
||||
// 실제로 그런 내원이 있는지 세어 본다 — 0이면 없는 문제고,
|
||||
// 있으면 정렬 규칙을 정해야 한다. 세기 전에는 어느 쪽인지 알 수 없다.
|
||||
foreach (var line in ExplainPeriod(conn, 0,
|
||||
"SELECT COUNT(*) 다중내원, MAX(행수) 최대행수 FROM ("
|
||||
+ " SELECT CodComNum, COUNT(*) 행수 FROM P_CodInf"
|
||||
+ " WHERE CodMtiSeq = 0 GROUP BY CodComNum HAVING COUNT(*) > 1)"
|
||||
+ " WHERE :k = 0"))
|
||||
{
|
||||
lines.Add($" [조사] CodMtiSeq=0 이 2행 이상인 내원: {line}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user