我写了一些逻辑来确定kcode(医生账单)对于患者是否正确。我写了一些逻辑来循环记录并在列中放置值得kcode的正确CP(护理提供者)的ID。由于某种原因,最后一条记录或最后两条记录没有遵循逻辑。这是我的逻辑代码(在游标内):
OPEN kcode_count;
kcode_loop: LOOP
FETCH kcode_count INTO dbPTNT_ID, dbCP_ID, dbSEEN, holder, dbDATE, holder2;
IF done THEN
LEAVE kcode_loop;
END IF;
IF dbPTNT_ID <> setPTNT_ID THEN
IF setPTNT_ID <> 0 THEN
UPDATE tmp_kcodes
SET SHOULD_GET = setCP_ID
WHERE setPTNT_ID = PTNT_ID;
END IF;
SET setPTNT_ID = dbPTNT_ID;
SET setCP_ID = dbCP_ID;
SET setSEEN = dbSEEN;
SET setDATE = dbDATE;
ELSEIF dbSEEN > setSEEN THEN
SET setCP_ID = dbCP_ID;
SET setSEEN = dbSEEN;
SET setDATE = dbDATE;
ELSEIF dbSEEN = setSEEN THEN
IF dbDATE < setDATE THEN
SET setCP_ID = dbCP_ID;
SET setSEEN = dbSEEN;
SET setDATE = dbDATE;
END IF;
END IF;
END LOOP kcode_loop;
CLOSE kcode_count;
如下所示,在SHOULD_GET列中,最后两个记录产生NULL。有什么理由吗?
答案 0 :(得分:0)
问题是,您只有在处理某位患者后才更新SHOULD_GET
列(患者20092469的数据会在循环获取第一份20092491患者记录时更新)。对于最后一名患者,这显然不可能发生,dbPTNT_ID <> setPTNT_ID
条件永远不会得到满足。
乍一看,我会重复
IF setPTNT_ID <> 0 THEN
UPDATE tmp_kcodes
SET SHOULD_GET = setCP_ID
WHERE setPTNT_ID = PTNT_ID;
END IF;
在kcode_loop结束后立即阻止更新最后一个正在处理的患者。
另一个解决方案可能是在游标返回的结果集的末尾附加一个“虚拟”行,这样就可以为最后一个病人触发dbPTNT_ID <> setPTNT_ID
条件。