prompt 14.获取用药天数 SF_SF_GETYYTS create or replace function SF_SF_GETYYTS ( pCFID00 number, --处方ID pZYTS00 number, --中药贴数 pMZZYBZ char default '0' --门诊住院标志:0门诊,1住院,2住院剂量+单位,3住院剂量 ) return varchar2 is -- modification history -- Person Date Comments -- qks 2014.06.25 create 获取用药天数 -- qks 2015.11.26 增加入院pMZZYBZ by ZYSF9-20151129-001 -- linzetao 2020.10.14 增加pMZZYBZ=3住院剂量 ZYSF9-20201012-001 -- qks 2021.02.23 pMZZYBZ=3: CSL000 -> nvl(CSL000,YPZSL0) LS_YYSJ00 varchar2(20); LS_PCMC00 YF_MZCFMX.PCMC00%type; LS_CSL000 YF_MZCFMX.CSL000%type; LS_ZHL000 YF_MZCFMX.ZHL000%type; LS_YPZSL0 YF_MZCFMX.YPZSL0%type; LS_ZQCS00 BM_PC0000.ZQCS00%type; LS_ZYTS00 YF_YZYPSQ.ZYTS00%type; LS_YZXZ00 YF_YZYPSQ.YZXZ00%type; LS_PCID00 YF_YZYPSQ.PCID00%type; LS_YYCS00 YF_YZYPSQ.YYCS00%type; begin LS_YYSJ00:='1'; begin if pMZZYBZ = '3' then select substrb(nvl(trim(max(nvl(CSL000,YPZSL0))),''),1,20) into LS_YYSJ00 from YF_YZYPSQ where YPQLPC=pCFID00 and rownum=1; if substr(LS_YYSJ00,1,1)='.' then LS_YYSJ00 := '0'||LS_YYSJ00; end if; elsif pMZZYBZ = '2' then select substrb(nvl(trim(max(CSL000||JLDW00)),''),1,20) into LS_YYSJ00 from YF_YZYPSQ where YPQLPC=pCFID00 and rownum=1; if substr(LS_YYSJ00,1,1)='.' then LS_YYSJ00 := '0'||LS_YYSJ00; end if; elsif pMZZYBZ = '1' then select YZXZ00,YYSJ00,PCID00,ZYTS00,YYCS00 into LS_YZXZ00,LS_YYSJ00,LS_PCID00,LS_ZYTS00,LS_YYCS00 from YF_YZYPSQ where YPQLPC=pCFID00 and rownum=1; if nvl(LS_ZYTS00,0)>1 then --中草药 LS_YYSJ00 := LS_ZYTS00; elsif nvl(LS_YYSJ00,0)>0 then --指定用药天数 LS_YYSJ00 := LS_YYSJ00; elsif LS_YZXZ00='3' and nvl(LS_YYCS00,0)>0 and nvl(LS_PCID00,0)>0 then --出院带药 select ZQCS00 into LS_ZQCS00 from BM_PC0000 where PCMC00=PCID00 and rownum=1; LS_YYSJ00 := least(ceil(LS_YYCS00/ls_ZQCS00),90); else LS_YYSJ00 := 1; end if; else if nvl(pZYTS00,0)>1 then --中草药 LS_YYSJ00 := pZYTS00; else select YYSJ00,PCMC00,CSL000,YPZSL0,ZHL000 into LS_YYSJ00,LS_PCMC00,LS_CSL000,LS_YPZSL0,LS_ZHL000 from YF_MZCFMX where CFID00=pCFID00 and rownum=1; if LS_YYSJ00 is null and LS_CSL000 is not null and LS_PCMC00 is not null then select ZQCS00 into LS_ZQCS00 from BM_PC0000 where PCMC00=LS_PCMC00 and rownum=1; if LS_ZQCS00 is not null then LS_YYSJ00 := least(ceil(LS_YPZSL0*LS_ZHL000/(LS_CSL000*ls_ZQCS00)),90); end if; end if; end if; end if; exception when others then LS_YYSJ00:='1'; end; return LS_YYSJ00; end; / show error;