---福利结账失败,2009-01期间某个福利类别期末处理,结账失败,提示:ORA-01407:无法更新("XXXX"."BM_DATA"."PSNCLID")为NULL。--查询垃圾数据,经查人员档案表bd_psndoc中有一条pk_psndoc='0001A9100000000012DJ',pk_psnbasdoc='0001A9100000000012DI'的记录被删除selectpsnid,pk_psnbasdocfrombm_datawherebmclassid='1003A910000000000TZ5'andcfundyear='2009'andcfundmonth='01'andpk_psnbasdocnotin(selectbm_data.pk_psnbasdocfrombm_data,bd_psndoc,bd_psnbasdocwherebm_data.psnid=bd_psndoc.pk_psndocandbd_psndoc.pk_psnbasdoc=bd_psnbasdoc.pk_psnbasdocandbmclassid='1003A910000000000TZ5'andcfundyear='2009'andcfundmonth='01')--造成福利产生垃圾数据select*frombd_psndocwherepk_psndoc='0001A9100000000012DJ'orpk_psnbasdoc='0001A9100000000012DI'--备份对应的表createtablebm_data_081217asselect*frombm_datacreatetablebm_psndata_081217asselect*frombm_psndata--福利档案select*frombm_datawherepsnid='0001A9100000000012DJ'--福利缴交select*frombm_psndatawherepsnid='0001A9100000000012DJ'--福利发放select*frombm_drawdatawherepsnid='0001A9100000000012DJ'--查询涉及的垃圾数据selectbmclassid,vbmclassname,cfundyear,cfundmonth,pk_bm_data,deptid,deptnamefrombm_data,bm_bmclass,bd_deptdocwhere(psnid='0001A9100000000012DJ'orpk_psnbasdoc='0001A9100000000012DI')andbm_data.bmclassid=bm_bmclass.pk_bm_classandbm_data.deptid=bd_deptdoc.pk_deptdoc--删除垃圾数据,历史月份的已经结账了,删除需要慎重,删除后重新进行2009-01期间的结账即可正常进行。deletefrombm_datawherepsnid='0001A9100000000012DJ';commit;deletefrombm_psndatawherepsnid='0001A9100000000012DJ';commit;