2016-07-06 49 views
0

我写了一些逻辑来确定kcode(医生帐单)是否对患者正确。我编写了一些逻辑来循环记录,并在列中放置了值得kcode的正确CP(护理提供者)的ID。由于某种原因,最后一条记录或最后2条记录不符合逻辑。这是我的逻辑代码(在光标内):从公式中删除最后一条记录

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。有什么理由?

enter image description here

+0

您已经在一个块中使用过'SET SHOULD_GET',它可能不会进入该块,请检查您的逻辑。 – Avishek

+0

@AvishekChat这是因为我希望它只是更新它通过每个具体患者的ID –

+0

的'更新后,你应该把'print'或'临时调试table'走后tmp_kcodes SET SHOULD_GET = setCP_ID WHERE setPTNT_ID = PTNT_ID ;',看什么时候,什么时候更新...... – Avishek

回答

0

的问题是,你只更新SHOULD_GET后您处理一个病人的情况(当循环取一号20092491病人的记录病人20092469的数据被更新)。对于最后一名患者来说,这显然不会发生,因此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条件。

相关问题