create or replace procedure SP_ZS_CLJMBCSYZ_ZYDZBL --从路径模板产生医嘱 --过程说明 (AD_KDYSBH in number default 0, --开单医生编号 AD_ZYID00 in number, --病人住院id AS_QYRQSJ in char, --医嘱起用日期时间'2003050710:00:00' AS_YEXM00 in char, --婴儿姓名 AS_MXSTR0 in char, --jhmxid用,间隔的串 AS_BXSTR0 in char, --jhmxid:YPNM00用,间隔的串,--为了解决备选替换问题 AD_CZY000 in number, --操作员id号 AS_SFYYYZ in char default '0', --是否延用原来的停止医嘱 AS_YHMSG0 OUT VARCHAR, --存储过程提示的错误信息 AS_SYSMSG OUT VARCHAR --系统提示的错误信息 ) AS -- MODIFICATION HISTORY -- Person Date Comments -- rbh 2014.12.10 CREATE DZBL-20141210-007 -- xuxm 2015.08.07 DZBL-20150805-002 (急)路径医嘱选择界面:一个路径同一个阶段存在多组中药处方,每组处方都有勾选需要引用的草药,引用出来会乱掉。详细见附件 -- xuxm 2016.08.25 ZYDZBL-20160824-004 (急)路径病人,一组颗粒剂草药生成到医嘱界面的写入到 BQ_YPYZ00.YFBMBH是57(门诊中药房),导致病区护理系统提取药品的时候,提取药房错误(有颗粒药房也有门诊中药房),正确应该都是提到颗粒药房 -- xuxm 2016.10.17 ZYDZBL-20161012-001 模板调用或路径引用时,输液、注射类药品首日次数默认满频次,口服类药品首日次数默认为当前时间到23:59:59之间的频次点数量。 -- xuxm 2017.12.29 ZYDZBL-20171229-002 路径引用生成医嘱保存首日次数没有起用或空的时候报错. -- xuxm 2018.01.18 ZYDZBL-20180118-001 临床路径医嘱药品生成起用时间空白 -- wuzy 2018.01.31 ZYDZBL-20180126-001 婴儿医嘱需要保存婴儿姓名 -- wuzy 2018.04.12 ZYDZBL-20180412-001 从临床路径生成的药品长嘱医嘱,参数ZS_SYSRCS为N时,不生成首日次数0 -- wuzy 2018.05.11 ZYDZBL-20180509-001 临床路径维护时,婴儿姓名处有空格不属于婴儿医嘱,需要过滤 -- wuzy 2018.06.04 ZYDZBL-20180531-002 过程加上日志 SP_TransLog -- xuxm 2018.08.27 ZYDZBL-20180827-005 【临床路径】路径医嘱生成界面:同组药品如果后面一条是非药品导致药品备注无法生成。 --------- ------------- ------------------------------- VSYSDATE date; --日期变量 VCZYXM0 BM_YGBM00.ZWXM00%type; --操作员姓名 VYZMXID BQ_YJYZ00.YZMXID%type; --医嘱号 VYFBMBH XT_YPFWFX.YFBMBH%type; --领药药房 VYPDLBH BM_YD0000.LBBH00%type; --药品大类编号 VKDBQ00 ZY_BRXXB0.DQBQ00%type; --当前病区 VDQKS00 ZY_BRXXB0.DQKS00%type; --当前科室 VZQDW00 BM_PC0000.ZQDW00%type; --频次单位 VYPYFMC BM_YPYF00.YPYFMC%type; --药品用法名称 VYFLBID BM_YPYF00.YFLBID%type; --药品用法类别 VMRQSSJ BM_YPYF00.MRQSSJ%type; --药品用法默认起始 VQYSJ00 char(8); --起用时间 VSYXTSJ number(1); --是否使用系统时间作为医嘱的启用时间 VCLBZSFTS char(1); --是否使用参数中的长临标志 VCOUNTER number(10); --计数器变量 VPARAMS varchar2(255); --参数变量 VERRMSG varchar2(255); --错误提示变量 V_SRCS00 number(3); --首日次数 V_YYRQ00 char(8); --用药日期 V_SFICU0 BM_BMBM00.SFICU0%type; V_ICUKS0 BM_BMBM00.BMBH00%TYPE; ECUSTOM exception; --错误变量 E_ICUCW0 EXCEPTION; E_NOKC EXCEPTION; --没有库存 VOLD_NO0000 LJ_JDYZMX.NO0000%type; --组号 VFJFSCBZ number(2); --附加费生成标志 I number(2); -- TEMPSTR varchar(200); -- 临时字符串 LS_ZLXMID BM_ZLZD00.ZLXMID%type; LS_YPNM00 BM_YD0000.YPNM00%type; OLD_YPNM00 BM_YD0000.YPNM00%type; LS_YPGG00 BM_YD0000.YPGG00%type; LS_ZLXMJC BM_ZLZD00.ZLXMJC%type; LS_YPMC00 BM_YD0000.YPMC00%type; LS_QZFS00 BM_YD0000.QZFS00%type; LS_LYSL00 BQ_YPYZMX.LYL000%type; LS_KSRQ varchar(10); LS_QYRQ varchar(10); LS_QYSJ varchar(8); TMPSTR varchar(200); TMPSTR1 varchar(200); TMPSTR2 varchar(200); LS_MRPCID BQ_YPYZ00.PCID00%type; LS_MRZQDW BQ_YPYZ00.ZQDW00%type; LS_MRZQCS BQ_YPYZ00.ZQDW00%type; LS_SFXYZTZRQ XT_XTCS00.VALUE0%type; LS_KCSL YF_YPKCXX.YKKCSL%TYPE; LS_YFBMBH YF_YPKCXX.YFBMBH%TYPE; LS_Z2J000 BM_YD0000.Z2J000%type; LS_SFPDMRYF number(5); LS_SFKYLRSRCS varchar2(10); VYSZID0 BQ_YPYZ00.YSZID0%type; LS_HZBZ00 varchar2(2); V_YEXM00 LJ_JDYZMX.YEXM00%type; --婴儿姓名 cursor C_YZMXKC is select A.ZLXMID, A.YPNM00, A.ZLXMJC, A.LBBH00, A.MCSL00 FROM VW_ZS_LJJHYZXX_ZYDZBL A, LJ_ZRZC00 B where A.ZYID00 = AD_ZYID00 AND A.ZRZCID = B.ZRZCID AND NVL(B.JSRQ00, ' ') = ' ' and INSTR(AS_MXSTR0, ',' || TO_CHAR(A.JHMXID) || ',') > 0 AND A.YPNM00 > 0; cursor C_LJYZMX is select A.LJYZMX, A.ZLXMID, A.YPNM00, A.MCSL00, B.ZQCS00, A.YYZF00, SL0000, B.ZQDW00 TSDW00, A.YFID00, B.ZQCD00, B.ZQDW00, A.JHMXID, A.CLBZ00, A.PCID00, A.PCMC00, A.ZLXMJC, A.NO0000, A.LBBH00, A.YZLB00, A.DMBZ01 AS DMBZ00, A.TZTS00, B.ZQCD00 ZQTS00, A.DW0000, A.YFMC00, A.YPGG00, A.JLDW00, A.ZHL000, A.LJID00, A.RCID00, BRZXJD, A.TS0000, A.MXYF00, A.CYCFBZ, A.TZRQ00, A.TZSJ00, A.BZKSRQ, A.YZCLLB, A.BZ0000, A.CJKS00, A.BBID00, A.BBMC00, A.KSRQ00, BRYZZT, A.SSXMJC from VW_ZS_LJJHYZXX_ZYDZBL A, BM_PC0000 B, LJ_ZRZC00 C where A.ZRZCID = C.ZRZCID and NVL(C.JSRQ00, ' ') = ' ' and A.PCID00 = B.PCID00(+) and INSTR(AS_MXSTR0, ',' || TO_CHAR(A.JHMXID) || ',') > 0 and A.ZYID00 = AD_ZYID00 --order by a.LJID00,a.RCID00,a.CYCFBZ,NO0000,a.XH0000 ; order by CLBZ00, RCID00, CCPXXH, PXH000, LBID00, YZXZLX, NO0000, TLBZXH, XH0000; begin VSYSDATE := sysdate; AS_SYSMSG := 'SP_ZS_CLJMBCSYZ_ZYDZBL(' || NVL(TO_CHAR(AD_KDYSBH), 'null') || ',' || NVL(TO_CHAR(AD_ZYID00), 'null') || ',' || AS_QYRQSJ || ',' || AS_YEXM00 || ',' || AS_MXSTR0 || ',' || AS_BXSTR0 || ',' || NVL(TO_CHAR(AD_CZY000), 'null') || ')'; SP_TRANSLOG(VSYSDATE, 'SP_ZS_CLJMBCSYZ_ZYDZBL', AD_CZY000, 0, AS_SYSMSG); select ZWXM00 into VCZYXM0 from BM_YGBM00 where YGBH00 = AD_CZY000; select DQBQ00, DQKS00, YSZID0 into VKDBQ00, VDQKS00, VYSZID0 from ZY_BRXXB0 where ZYID00 = AD_ZYID00; TMPSTR := ' '; TMPSTR1 := ' '; TMPSTR2 := ' '; AS_YHMSG0 := ' '; select count(*) into LS_SFPDMRYF from XT_XTCS00 where NAME00 = 'ZS_LJSFZPDMRYFKC' and VALUE0 = 'Y'; select NVL(max(trim(VALUE0)), 'N') into LS_SFKYLRSRCS from XT_XTCS00 where NAME00 = 'ZS_SFKYLRSRCS'; for KCMX in C_YZMXKC loop --判断库存 begin begin --select YKKCSL into ls_kcsl from YF_YPKCXX a,BM_YD0000 b where yfbmbh=ls_yfbmbh and a.ypnm00=kcmx.ypnm00 and a.ZTBZ00='0' and a.YPNM00=b.YPNM00 and b.TZRQ00 is null; select YKKCSL into LS_KCSL from XT_YPFWFX A, YF_YPKCXX B where A.YPLBBH = KCMX.LBBH00 and A.SLBMBH = VKDBQ00 and A.YFBMBH = B.YFBMBH and YPNM00 = KCMX.YPNM00 and B.ZTBZ00 = '0' and ((LS_SFPDMRYF = 1 and A.MRBZ00 = 'Y') or LS_SFPDMRYF = 0) and exists (select 1 from BM_YD0000 where YPNM00 = B.YPNM00 and (TZRQ00 is null or TZRQ00 >= TO_CHAR(sysdate, 'YYYYMMDD'))) and ROWNUM = 1; exception when others then LS_KCSL := -1000; end; if KCMX.MCSL00 <= 0 then if TMPSTR2 = ' ' then TMPSTR2 := KCMX.ZLXMJC; else TMPSTR2 := TMPSTR2 || ',' || KCMX.ZLXMJC; end if; end if; if LS_KCSL <> -1000 and LS_KCSL <= 0 then if TMPSTR = ' ' then TMPSTR := KCMX.ZLXMJC; else TMPSTR := TMPSTR || ',' || KCMX.ZLXMJC; end if; elsif LS_KCSL = -1000 then if TMPSTR1 = ' ' then TMPSTR1 := KCMX.ZLXMJC; else TMPSTR1 := TMPSTR1 || ',' || KCMX.ZLXMJC; end if; end if; --判断库存 end end loop; if TMPSTR <> ' ' then AS_YHMSG0 := TMPSTR || '药品, 在药房库存不足!'; end if; if TMPSTR1 <> ' ' then if AS_YHMSG0 = ' ' then AS_YHMSG0 := TMPSTR1 || '药品,' || ' 在药房已暂停使用!'; else AS_YHMSG0 := AS_YHMSG0 || ',' || TMPSTR1 || '药品,' || ' 在药房已暂停使用!'; end if; end if; if TMPSTR2 <> ' ' then if AS_YHMSG0 = ' ' then AS_YHMSG0 := TMPSTR2 || '药品,' || '剂量不能为0!'; else AS_YHMSG0 := AS_YHMSG0 || ',' || TMPSTR2 || '药品,' || ' 剂量不对!'; end if; end if; if AS_YHMSG0 <> ' ' then raise E_NOKC; end if; begin select VALUE0 into LS_SFXYZTZRQ from XT_XTCS00 where NAME00 = 'ZS_LJ_SFXYZTZRQ'; exception when others then LS_SFXYZTZRQ := 'N'; end; V_ICUKS0 := VDQKS00; select NVL(MAX(SFICU0), '0') INTO V_SFICU0 FROM BM_BMBM00 WHERE BMBH00 = VKDBQ00; IF V_SFICU0 = '1' THEN begin select A.KSH000 into V_ICUKS0 from BM_BQKS00 A, BM_BMBM00 B where A.KSH000 = B.BMBH00 and B.SFICU0 = '1' and A.BQH000 = VKDBQ00; exception when OTHERS then raise E_ICUCW0; return; end; END IF; --取服务器时间做医嘱启用时间 select count(*) into VCOUNTER from XT_XTCS00 where NAME00 = 'ZS_YZ_DQSJWYZQYSJ' and VALUE0 = 'Y'; if VCOUNTER > 0 then VSYXTSJ := 1; else VSYXTSJ := 0; end if; VQYSJ00 := SUBSTR(AS_QYRQSJ, 12, 5) || ':00'; VOLD_NO0000 := 0; TMPSTR := ''; OLD_YPNM00 := 0; for ZLMX in C_LJYZMX loop --zlmx.BZKSRQ--> zlmx.ksrq00 modify by 20013.02.19 if ZLMX.KSRQ00 >= TO_CHAR(sysdate, 'YYYYMMDD') then LS_QYRQ := ZLMX.BZKSRQ; else select TO_CHAR(sysdate, 'YYYYMMDD') into LS_QYRQ from DUAL; --过期的用引入的日期 end if; --如果为婴儿医嘱,需要替换婴儿姓名 begin --LJ_JDYZMX.YEXM00存在空格 select trim(YEXM00) into V_YEXM00 from LJ_JDYZMX where JHMXID = ZLMX.JHMXID; exception when others then V_YEXM00 := ''; end; --找到病人的婴儿姓名并替换 if NVL(V_YEXM00, '') <> '' or V_YEXM00 is not null then begin select YEXM00 into V_YEXM00 from BQ_JSXX00 where ZYID00 = AD_ZYID00 and ROWNUM = 1; exception when others then V_YEXM00 := ''; end; end if; if NVL(ZLMX.YPNM00, 0) = 0 then if VOLD_NO0000 <> 0 and OLD_YPNM00 > 0 then --生成YZNR00,YZNR01 SP_BQ_YPFJFY(VYZMXID, AD_CZY000); end if; I := INSTR(AS_BXSTR0, ',' || TO_CHAR(ZLMX.JHMXID) || ':'); if I > 0 then TEMPSTR := SUBSTR(AS_BXSTR0, I + LENGTH(',' || TO_CHAR(ZLMX.JHMXID) || ':'), LENGTH(AS_BXSTR0) - I - LENGTH(',' || TO_CHAR(ZLMX.JHMXID) || ':') + 1); if INSTR(TEMPSTR, ',') > 0 then LS_ZLXMID := TO_NUMBER(SUBSTR(TEMPSTR, 1, INSTR(TEMPSTR, ',') - 1)); else LS_ZLXMID := TO_NUMBER(TEMPSTR); end if; else LS_ZLXMID := ZLMX.ZLXMID; end if; if VSYXTSJ = 1 then select TO_CHAR(sysdate, 'hh24:mi:ss') into VQYSJ00 from DUAL; else begin select SUBSTR(VALUE0, 1, 8) into VQYSJ00 from XT_XTCS00 where NAME00 = 'BQ_PTYZMRQYSJ'; exception when others then VQYSJ00 := '08:00:00'; end; end if; if LS_ZLXMID <> '0' then begin select ZLXMJC into LS_ZLXMJC from VW_BQ_ZLXM00 where ZLXMID = LS_ZLXMID; exception when others then AS_YHMSG0 := '项目:' || ZLMX.ZLXMJC || '已暂停使用!'; raise E_NOKC; end; end if; -- select ZLXMJC into ls_zlxmjc from bm_zlzd00 where ZLXMID=ls_zlxmid; select SQ_BQ_YZMX00_YZMXID.NEXTVAL into VYZMXID from DUAL where ROWNUM = 1; insert into BQ_YJYZ00 (YZMXID, ZYID00, YEXM00, YZLB00, CLBZ00, PXSJ00, ZLXMID, ZLXMJC, ZXKS00, KZYS00, LRRQ00, LRSJ00, LRRXM0, QYRQ00, QYSJ00, TS0000, TSDW00, BQH000, KSH000, PCID00, MCSL00, DW0000, PCMC00, YZZT00, TQFS00, YZCLLB, BZ0000, YZLY00, LJID00, MBRCID, BRZXJD, JHMXID, TZRQ00, TZSJ00, CJKS00, BB0000, BBID00, XGLYID, SSXMJC, YSZID0) Values (VYZMXID, AD_ZYID00, V_YEXM00, ZLMX.YZLB00, ZLMX.CLBZ00, TO_CHAR(sysdate, 'hh24:mi:ss'), LS_ZLXMID, ZLMX.ZLXMJC, SF_ZS_XMZXKS_ZYDZBL(ZLMX.ZLXMID, VKDBQ00, V_ICUKS0), AD_KDYSBH, TO_CHAR(sysdate, 'yyyymmdd'), TO_CHAR(sysdate, 'hh24:mi:ss'), VCZYXM0, -- to_char(to_date(substr(as_QYRQSJ,1,10),'yyyy.mm.dd'),'yyyymmdd'),Vqysj00, LS_QYRQ, VQYSJ00, --0, zlmx.tsdw00, DECODE(ZLMX.CLBZ00, '0', 0, ZLMX.ZQTS00), ZLMX.TSDW00, VKDBQ00, V_ICUKS0, NVL(ZLMX.PCID00, 0), NVL(ZLMX.MCSL00, 1), ZLMX.DW0000, NVL(ZLMX.PCMC00, ' '), '7', '0', NVL(ZLMX.YZCLLB, '正常'), ZLMX.BZ0000, '1', ZLMX.LJID00, ZLMX.RCID00, ZLMX.BRZXJD, ZLMX.JHMXID, DECODE(LS_SFXYZTZRQ, 'Y', ZLMX.TZRQ00, ''), DECODE(LS_SFXYZTZRQ, 'Y', ZLMX.TZSJ00, ''), DECODE(ZLMX.CJKS00, 0, VKDBQ00, ZLMX.CJKS00), ZLMX.BBMC00, ZLMX.BBID00, DECODE(AS_SFYYYZ, '0', 0, ZLMX.LJYZMX), ZLMX.SSXMJC, VYSZID0); --自动生成附加费用 if sql%notfound then VERRMSG := '生成非药医嘱时发生错误!'; Raise ECUSTOM; end if; SP_BQ_YJFJFY_ZYDZBL(VYZMXID, 0); OLD_YPNM00 := ZLMX.YPNM00; elsif ZLMX.YPNM00 > 0 then --药品 if ZLMX.NO0000 <> VOLD_NO0000 or ZLMX.NO0000 = 0 then ---插入主表zlmx.no0000相同的是同组的 if VOLD_NO0000 <> 0 and OLD_YPNM00 > 0 then --生成YZNR00,YZNR01 SP_BQ_YPFJFY_ZYDZBL(VYZMXID, AD_CZY000); end if; begin /* select decode(zlmx.lbbh00,'1','1','2','2','0') into Vypdlbh from dual; select yfbmbh into vyfbmbh from xt_ypfwfx where slbmbh = vkdbq00 and yplbbh =Vypdlbh and mrbz00 = 'Y' and rownum = 1;*/ select YFBMBH into VYFBMBH from (select M.YFBMBH from YF_YPKCXX M, XT_YPFWFX N where M.YFBMBH = N.YFBMBH and SLBMBH = VKDBQ00 and ZTBZ00 = '0' and M.YPNM00 = ZLMX.YPNM00 order by MRBZ00 desc, PX0000) where ROWNUM <= 1; exception when others then VYFBMBH := 0; end; if NVL(ZLMX.YFID00, ' ') = ' ' or ZLMX.YFID00 = '' then VYFLBID := 0; end if; begin select YFLBID, NVL(MRQSSJ, 'A') into VYFLBID, VQYSJ00 from BM_YPYF00 where trim(YFID00) = trim(ZLMX.YFID00); if VQYSJ00 <> 'A' then VQYSJ00 := SUBSTR(VQYSJ00, 0, 5) || ':00'; end if; exception when others then VYFLBID := 0; --Vqysj00:='08:00:00'; end; if VSYXTSJ = 1 then select TO_CHAR(sysdate, 'hh24:mi:ss') into VQYSJ00 from DUAL; else if VQYSJ00 = 'A' and VYFLBID in (1, 2) then --取启用时间 begin select SUBSTR(VALUE0, 1, 8) into VQYSJ00 from XT_XTCS00 where NAME00 = 'BQ_ZSYZMRQYSJ'; exception when others then VQYSJ00 := '08:00:00'; end; elsif VQYSJ00 = 'A' then begin select SUBSTR(VALUE0, 1, 8) into VQYSJ00 from XT_XTCS00 where NAME00 = 'BQ_PTYZMRQYSJ'; exception when others then VQYSJ00 := '09:00:00'; end; end if; end if; if ZLMX.MCSL00 <= 0 then VERRMSG := ZLMX.ZLXMJC || '每次用量必须输入大于0的数字!'; raise ECUSTOM; end if; select SQ_BQ_YZMX00_YZMXID.NEXTVAL into VYZMXID from DUAL where ROWNUM = 1; select PCID00, ZQDW00, ZQCS00 into LS_MRPCID, LS_MRZQDW, LS_MRZQCS from VW_BQ_CYMRPC_ZYDZBL where ROWNUM = 1; V_YYRQ00 := ''; if ZLMX.CLBZ00 = '0' then --长嘱首日次数 全部 为0 select NVL(max(HZBZ00), '0') into LS_HZBZ00 from BQ_YFLB00 where YFLBID = VYFLBID; if V_SRCS00 = -1 or LS_SFKYLRSRCS = 'Y' or (LS_SFKYLRSRCS = 'M' and LS_HZBZ00 = '0') or V_SRCS00 = '-1' then V_SRCS00 := 0; else --长嘱首日次数 全部 为0 begin V_SRCS00 := SF_ZS_SRCS00_DZBL(VQYSJ00, ZLMX.YFID00, ZLMX.PCID00); exception when others then V_SRCS00 := 0; end; end if; begin select DECODE(trim(VALUE0), 'Y', 0, -1) into V_SRCS00 from XT_XTCS00 where NAME00 = 'ZS_SYSRCS'; exception when others then V_SRCS00 := -1; end; else --临嘱首日次数 -1 V_SRCS00 := -1; if (ZLMX.LBBH00 = '2') then V_YYRQ00 := TO_CHAR(sysdate + 1, 'YYYYMMDD'); end if; end if; insert into BQ_YPYZ00 (YZID00, ZYID00, YEXM00, YPLBBH, CLBZ00, PXSJ00, KZYS00, LRRQ00, LRSJ00, LRRXM0, QYRQ00, QYSJ00, ZQS000, ZQCD00, ZQDW00, JYCS00, ZQCYTS, BQH000, KSH000, YFBMBH, PCID00, PCMC00, YFID00, YPYFMC, YYZF00, YZZT00, YZLY00, TZRQ00, TZSJ00, BZ0000, SRCS00, YYRQ00, YSZID0) values (VYZMXID, AD_ZYID00, V_YEXM00, ZLMX.LBBH00, ZLMX.CLBZ00, TO_CHAR(sysdate, 'hh24:mi:ss'), AD_KDYSBH, TO_CHAR(sysdate, 'yyyymmdd'), TO_CHAR(sysdate, 'hh24:mi:ss'), VCZYXM0, LS_QYRQ, VQYSJ00, 1, NVL(ZLMX.ZQCD00, 1), NVL(ZLMX.ZQDW00, '天'), DECODE(ZLMX.LBBH00, '2', DECODE(ZLMX.YFMC00, '冲服', 0, ZLMX.TS0000), 0), DECODE(ZLMX.LBBH00, '2', ZLMX.TS0000, 1), --zlmx.ts0000, VKDBQ00, VDQKS00, VYFBMBH, DECODE(ZLMX.CYCFBZ, '0', ZLMX.PCID00, '1', LS_MRPCID), NVL(ZLMX.PCMC00, ' '), ZLMX.YFID00, ZLMX.YFMC00, ZLMX.YYZF00, '7', '1', DECODE(LS_SFXYZTZRQ, 'Y', ZLMX.TZRQ00, ''), DECODE(LS_SFXYZTZRQ, 'Y', ZLMX.TZSJ00, ''), ZLMX.BZ0000, V_SRCS00, V_YYRQ00, VYSZID0); VFJFSCBZ := 0; end if; --取得备用药品begin I := INSTR(AS_BXSTR0, ',' || TO_CHAR(ZLMX.JHMXID) || ':'); if I > 0 then TEMPSTR := SUBSTR(AS_BXSTR0, I + LENGTH(',' || TO_CHAR(ZLMX.JHMXID) || ':'), LENGTH(AS_BXSTR0) - I - LENGTH(',' || TO_CHAR(ZLMX.JHMXID) || ':') + 1); if INSTR(TEMPSTR, ',') > 0 then LS_YPNM00 := TO_NUMBER(SUBSTR(TEMPSTR, 1, INSTR(TEMPSTR, ',') - 1)); else LS_YPNM00 := TO_NUMBER(TEMPSTR); end if; else LS_YPNM00 := ZLMX.YPNM00; end if; --取得备用药品end select YPGG00, YPMC00, QZFS00, Z2J000 into LS_YPGG00, LS_YPMC00, LS_QZFS00, LS_Z2J000 from BM_YD0000 where YPNM00 = LS_YPNM00; --判断库存 begin --select yfbmbh into ls_yfbmbh from xt_ypfwfx where yplbbh=zlmx.lbbh00 and mrbz00='Y' and slbmbh=Vkdbq00 and rownum<=1; begin --select YKKCSL into ls_kcsl from YF_YPKCXX where yfbmbh=ls_yfbmbh and ypnm00=ls_ypnm00 and ZTBZ00='0' ; select YKKCSL into LS_KCSL from XT_YPFWFX A, YF_YPKCXX B where A.YPLBBH = ZLMX.LBBH00 and A.SLBMBH = VKDBQ00 and A.YFBMBH = B.YFBMBH and YPNM00 = LS_YPNM00 and B.ZTBZ00 = '0' and ((LS_SFPDMRYF = 1 and A.MRBZ00 = 'Y') or LS_SFPDMRYF = 0) and ROWNUM = 1; exception when others then LS_KCSL := -1; end; if LS_KCSL = 0 then TMPSTR := LS_YPMC00 || ', 可能是药品目录已停用或规格已变化,请通知网络中心重新维护!'; AS_YHMSG0 := 'YPNM00=' || TO_CHAR(LS_YPNM00) || ' 药品名称' || '库存不足,可能是药品目录已停用或规格已变化,请通知网络中心重新维护!'; raise E_NOKC; elsif LS_KCSL < 0 then TMPSTR := '在药房已暂停使用!'; AS_YHMSG0 := 'YPNM00=' || TO_CHAR(LS_YPNM00) || ' 药品名称' || LS_YPMC00 || '在药房已暂停使用!'; raise E_NOKC; end if; --判断库存 end if ZLMX.CLBZ00 = '2' then select DECODE(LS_QZFS00, '2', CEIL(ZLMX.TS0000 * ZLMX.MCSL00), '0', CEIL(ZLMX.MCSL00) * ZLMX.TS0000, ZLMX.TS0000 * ZLMX.MCSL00) into LS_LYSL00 from DUAL; end if; if ZLMX.CLBZ00 = '1' then LS_LYSL00 := ZLMX.SL0000; end if; if ZLMX.CLBZ00 = '0' then LS_LYSL00 := SF_BQ_LYLJS0(LS_QZFS00, ZLMX.MCSL00, LS_Z2J000, ZLMX.ZQCS00, 1); --ls_lysl00:=0; end if; insert into BQ_YPYZMX (YZID00, YZMXID, YPNM00, YPMC00, YPGG00, MCSL00, JLDW00, LYL000, ZYFYDW, Z2J000, TQFS00, YZCLLB, DMBZ00, XMYFMC, LJID00, MBRCID, BRZXJD, JHMXID, XGLYID) values (VYZMXID, SQ_BQ_YZMX00_YZMXID.NEXTVAL, LS_YPNM00, LS_YPMC00, LS_YPGG00, ZLMX.MCSL00, ZLMX.JLDW00, LS_LYSL00, ZLMX.DW0000, ZLMX.ZHL000, '0', NVL(ZLMX.YZCLLB, '正常'), NVL(ZLMX.DMBZ00, '0'), ZLMX.MXYF00, ZLMX.LJID00, ZLMX.RCID00, ZLMX.BRZXJD, ZLMX.JHMXID, DECODE(AS_SFYYYZ, '0', 0, ZLMX.LJYZMX)); /*if Vfjfscbz=0 then sp_bq_ypfjfy(Vyzmxid,0); Vfjfscbz:=1; end if;*/ end if; VOLD_NO0000 := ZLMX.NO0000; OLD_YPNM00 := ZLMX.YPNM00; update LJ_YZMX00 A set LSRCID = (select RCID00 from LJ_JDZXQK where ZRZCID = A.ZRZCID and (TO_CHAR(sysdate, 'YYYYMMDD') between ZXKSRQ and ZXJSRQ) and DQJDBZ = '1' and ROWNUM = 1) where LJYZMX = ZLMX.LJYZMX; end loop; if VOLD_NO0000 <> 0 and OLD_YPNM00 > 0 then --生成YZNR00,YZNR01 SP_BQ_YPFJFY_ZYDZBL(VYZMXID, AD_CZY000); end if; exception when NO_DATA_FOUND then AS_YHMSG0 := '数据没有找到!'; RAISE_APPLICATION_ERROR(-20001, SUBSTR('数据没有找到!*' || SQLERRM || ',' || AS_SYSMSG, 1, 220)); when E_ICUCW0 then AS_YHMSG0 := '取ICU科室错误!'; RAISE_APPLICATION_ERROR(-20004, SUBSTRB('取ICU科室错误!*返回信息:' || AS_SYSMSG, 1, 220)); when E_NOKC then RAISE_APPLICATION_ERROR(-20010, SUBSTRB(AS_YHMSG0 || '*', 1, 220)); when ECUSTOM then AS_YHMSG0 := VERRMSG; RAISE_APPLICATION_ERROR(-20010, SUBSTR(VERRMSG || '!*' || AS_SYSMSG, 1, 220)); when others then AS_YHMSG0 := VERRMSG; RAISE_APPLICATION_ERROR(-20002, SUBSTR(NVL(SQLERRM, '原因不明出错') || '!*' || AS_SYSMSG, 1, 220)); end; /