prompt 4 正在创建函数 SP_XK_YWZX00 CREATE OR REPLACE PROCEDURE SP_XK_YWZX00 --项目执行 ( PSQDH00 IN VARCHAR, --申请单号 PYGXKH0 IN VARCHAR, --员工胸卡号 PBMBH00 IN NUMBER --部门编号 ) AS --XM RQ BZ --sechen 20080825 新建项目执行 --liuj 20100831 增加输出SP_YJ_YWZX00参数:PSFXKCS 1 --liuj 20120530 附加血液费用项目执行 for LKSX-20120517-001 --jinfl 20140307 血液附加费用修改为可维护多个 LKSX-20140225-001 --daihq 20140915 过滤已冲销的交叉配血记录 for LKSX-20140829-001 Vxmzt00 yj_yw0000.xmzt00%type; --项目状态 2 已收费 Vzlxmid yj_yw0000.zlxmid%type; --诊疗项目ID Vlbbz00 bm_zlzd00.lbbz00%type; --父子项目标志 0 父 1 子 Vsl0000 yj_yw0000.sl0000%type; --医技数量 vFJYJDZ varchar2(30); --附加费医技单据号组 vFJFYJD varchar2(10); --附加费单个医技单据号 vCount00 Number(5); ecustom exception; cursor c_yjdjh0 is select yjdjh0,yjdjh1,yjdjh2,xyyjdh,CXYJDH,FJYJDH,fjfyjd,FJYJDZ from XK_JCPXBG where JCPXZT='2' and SQDH00=PSQDH00 and CXBZ00<>'N'; BEGIN for yj in c_yjdjh0 loop if yj.yjdjh0 is not null then --判断是否收费 select xmzt00 into Vxmzt00 from yj_yw0000 where yjdjh0=yj.yjdjh0; --2008.8.22 sechen 如果收费成功,则执行 if Vxmzt00 = 2 then select zlxmid,sl0000 into Vzlxmid,Vsl0000 from yj_yw0000 where yjdjh0=yj.yjdjh0; --取得诊疗项目ID,数量 select lbbz00 into Vlbbz00 from bm_zlzd00 where zlxmid=Vzlxmid; SP_YJ_YWZX00(yj.yjdjh0,Vzlxmid,Vsl0000,Vlbbz00,PYGXKH0,PBMBH00,'Y',1); --单据号 子项目ID 执行数量 子项目标志 执行人胸卡号 执行科室 else raise ecustom; end if; end if; if yj.yjdjh1 is not null then --判断是否收费 select xmzt00 into Vxmzt00 from yj_yw0000 where yjdjh0=yj.yjdjh1; --2008.8.22 sechen 如果收费成功,则执行 if Vxmzt00 = 2 then select zlxmid,sl0000 into Vzlxmid,Vsl0000 from yj_yw0000 where yjdjh0=yj.yjdjh1; --取得诊疗项目ID,数量 select lbbz00 into Vlbbz00 from bm_zlzd00 where zlxmid=Vzlxmid; SP_YJ_YWZX00(yj.yjdjh1,Vzlxmid,Vsl0000,Vlbbz00,PYGXKH0,PBMBH00,'Y',1); --单据号 子项目ID 执行数量 子项目标志 执行人胸卡号 执行科室 else raise ecustom; end if; end if; if yj.yjdjh2 is not null then --判断是否收费 select xmzt00 into Vxmzt00 from yj_yw0000 where yjdjh0=yj.yjdjh2; --2008.8.22 sechen 如果收费成功,则执行 if Vxmzt00 = 2 then select zlxmid,sl0000 into Vzlxmid,Vsl0000 from yj_yw0000 where yjdjh0=yj.yjdjh2; --取得诊疗项目ID,数量 select lbbz00 into Vlbbz00 from bm_zlzd00 where zlxmid=Vzlxmid; SP_YJ_YWZX00(yj.yjdjh2,Vzlxmid,Vsl0000,Vlbbz00,PYGXKH0,PBMBH00,'Y',1); --单据号 子项目ID 执行数量 子项目标志 执行人胸卡号 执行科室 else raise ecustom; end if; end if; if yj.fjyjdh is not null then --判断是否收费 select xmzt00 into Vxmzt00 from yj_yw0000 where yjdjh0=yj.fjyjdh; --2008.8.22 sechen 如果收费成功,则执行 if Vxmzt00 = 2 then select zlxmid,sl0000 into Vzlxmid,Vsl0000 from yj_yw0000 where yjdjh0=yj.fjyjdh; --取得诊疗项目ID,数量 select lbbz00 into Vlbbz00 from bm_zlzd00 where zlxmid=Vzlxmid; SP_YJ_YWZX00(yj.fjyjdh,Vzlxmid,Vsl0000,Vlbbz00,PYGXKH0,PBMBH00,'Y',1); --单据号 子项目ID 执行数量 子项目标志 执行人胸卡号 执行科室 else raise ecustom; end if; end if; if yj.xyyjdh is not null then ----血费对应的医技单据流水号 --判断是否收费 select xmzt00 into Vxmzt00 from yj_yw0000 where yjdjh0=yj.xyyjdh; --2008.8.22 sechen 如果收费成功,则执行 if Vxmzt00 = 2 then select zlxmid,sl0000 into Vzlxmid,Vsl0000 from yj_yw0000 where yjdjh0=yj.xyyjdh; --取得诊疗项目ID,数量 select lbbz00 into Vlbbz00 from bm_zlzd00 where zlxmid=Vzlxmid; SP_YJ_YWZX00(yj.xyyjdh,Vzlxmid,Vsl0000,Vlbbz00,PYGXKH0,PBMBH00,'Y',1); --单据号 子项目ID 执行数量 子项目标志 执行人胸卡号 执行科室 else raise ecustom; end if; end if; if yj.CXYJDH is not null then --判断是否收费 select xmzt00 into Vxmzt00 from yj_yw0000 where yjdjh0=yj.CXYJDH; --2008.8.22 sechen 如果收费成功,则执行 if Vxmzt00 = 2 then select zlxmid,sl0000 into Vzlxmid,Vsl0000 from yj_yw0000 where yjdjh0=yj.CXYJDH; --取得诊疗项目ID,数量 select lbbz00 into Vlbbz00 from bm_zlzd00 where zlxmid=Vzlxmid; SP_YJ_YWZX00(yj.CXYJDH,Vzlxmid,Vsl0000,Vlbbz00,PYGXKH0,PBMBH00,'Y',1); --单据号 子项目ID 执行数量 子项目标志 执行人胸卡号 执行科室 else raise ecustom; end if; end if; /*if yj.fjfyjd is not null then --判断是否收费 select xmzt00 into Vxmzt00 from yj_yw0000 where yjdjh0=yj.fjfyjd; if Vxmzt00 = 2 then select zlxmid,sl0000 into Vzlxmid,Vsl0000 from yj_yw0000 where yjdjh0=yj.fjfyjd; --取得诊疗项目ID,数量 select lbbz00 into Vlbbz00 from bm_zlzd00 where zlxmid=Vzlxmid; SP_YJ_YWZX00(yj.fjfyjd,Vzlxmid,Vsl0000,Vlbbz00,PYGXKH0,PBMBH00,'Y',1); --单据号 子项目ID 执行数量 子项目标志 执行人胸卡号 执行科室 else raise ecustom; end if; end if;*/ if yj.FJYJDZ is not null then vFJYJDZ:=yj.FJYJDZ||','; vCount00:=0; while (length(vFJYJDZ)>0) and (vCount00<3) loop --为了防止死循环,循环三次 vFJFYJD:=substr(vFJYJDZ,1,instr(vFJYJDZ,',')-1); select xmzt00 into Vxmzt00 from yj_yw0000 where yjdjh0=vFJFYJD; if Vxmzt00 = 2 then select zlxmid,sl0000 into Vzlxmid,Vsl0000 from yj_yw0000 where yjdjh0=vFJFYJD; --取得诊疗项目ID,数量 select lbbz00 into Vlbbz00 from bm_zlzd00 where zlxmid=Vzlxmid; SP_YJ_YWZX00(vFJFYJD,Vzlxmid,Vsl0000,Vlbbz00,PYGXKH0,PBMBH00,'Y',1); --单据号 子项目ID 执行数量 子项目标志 执行人胸卡号 执行科室 else raise ecustom; end if; vFJYJDZ:=substr(vFJYJDZ,instr(vFJYJDZ,',')+1,length(vFJYJDZ)); vCount00:=vCount00+1; end loop; end if; end loop; EXCEPTION WHEN Ecustom THEN RAISE_APPLICATION_ERROR(-20010,substrb('项目不是收费状态'||'*'||sqlerrm,1,220)); WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20020, NVL(SQLERRM, '原因不明出错')||'!*'); ROLLBACK; END SP_XK_YWZX00; /