CREATE OR REPLACE PROCEDURE SP_YF_BQYZZDSHFY( PCKDH00 in char, --出库单号 PCZY000 in number, --操作员 PCOMMIT in char, PINXML0 in char --其他入参 ) as --电子病历评级数据 LS_CKDH00 YF_YZYPSQ.CKDH00%type; YF_SFZDSHZDFY varchar2(20); LS_FYRQSJ varchar2(20); -- MODIFICATION HISTORY 3.1 -- Person Date Comments -- dsm 2025.07.08 create for YF-20250626-004 -- dsm 2025.07.22 整个单的审核时间要一样,否则领药单查询会出现重复记录 for YF-20250721-001 begin --0不自动,1自动(第1位自动审核,第2位自动发药)默认00 select nvl(max(trim(VALUE0)),'00') into YF_SFZDSHZDFY from XT_XTCS00 where name00='YF_SFZDSHZDFY'; if YF_SFZDSHZDFY='00' then return; end if; LS_CKDH00:=trim(PCKDH00); --审核日期、审核人 if substr(YF_SFZDSHZDFY,1,1)='1' then begin ---select to_char(to_date(FYRQ00||FYSJ00,'YYYYMMDDHH24:MI:SS')-round(DBMS_RANDOM.value(1,5))/1440,'YYYYMMDDHH24:MI:SS') into LS_FYRQSJ from YF_YZYPSQ where CKDH00=LS_CKDH00 and (SHRQ00 is null or SHRQ00='20991231') and rownum=1; select to_char(to_date(FYRQ00||FYSJ00,'YYYYMMDDHH24:MI:SS')-round(DBMS_RANDOM.value(1,5),2)/1440,'YYYYMMDDHH24:MI:SS') into LS_FYRQSJ from YF_YZYPSQ where CKDH00=LS_CKDH00 and (SHRQ00 is null or SHRQ00='20991231') and rownum=1; ---因原语句中用了round函数导致只有分钟有差值 秒数一模一样数据看着太假 故修改round函数取2位小数 修改日期:2025.10.09 修改人:蔡佳源 exception when others then LS_FYRQSJ:=' '; end; --update YF_YZYPSQ set ZLFWMC=to_char(to_date(FYRQ00||FYSJ00,'YYYYMMDDHH24:MI:SS')-round(DBMS_RANDOM.value(1,5))/1440,'YYYYMMDDHH24:MI:SS') where CKDH00=LS_CKDH00 and (SHRQ00 is null or SHRQ00='20991231'); if LS_FYRQSJ<>' ' then Update YF_YZYPSQ set SHRQ00=substr(LS_FYRQSJ,1,8), SHSJ00=substr(LS_FYRQSJ,9,8), SHR000=FYR000,SHBZ00='1' ,ZLFWMC='' where CKDH00=LS_CKDH00 and (SHRQ00 is null or SHRQ00='20991231'); end if; end if; --摆药日期、摆药人 -- update YF_YZYPSQ set BYRQ00=FYRQ00,BYSJ00=to_char(to_date(FYRQ00||FYSJ00,'YYYYMMDDHH24:MI:SS')+round(DBMS_RANDOM.value(1,7))/1440,'HH24:MI:SS'), -- BYR000=decode(nvl(FHR000,-1),-1,FYR000) where CKDH00=LS_CKDH00 and CKDH00 is not null and BYRQ00 is null; --离柜发药日期、发药人 if substr(YF_SFZDSHZDFY,2,1)='1' then LS_FYRQSJ:=' '; begin ---select to_char(to_date(FYRQ00||FYSJ00,'YYYYMMDDHH24:MI:SS')+round(DBMS_RANDOM.value(1,10))/1440,'YYYYMMDDHH24:MI:SS') into LS_FYRQSJ from YF_YZYPSQ where CKDH00=LS_CKDH00 and CKDH00 is not null and SJFYRQ is null and rownum=1; ---1.因原语句中用了round函数导致只有分钟有差值 秒数一模一样数据看着太假 故修改round函数取2位小数 修改日期:2025.10.09 修改人:蔡佳源 ---2.因原语句中随机数为1-10分钟与实际病区全区摆药所需时间严重不符 故修改随机数为20-40分钟 修改日期:2025.10.09 修改人:蔡佳源 select to_char(to_date(FYRQ00||FYSJ00,'YYYYMMDDHH24:MI:SS')+round(DBMS_RANDOM.value(20,40),2)/1440,'YYYYMMDDHH24:MI:SS') into LS_FYRQSJ from YF_YZYPSQ where CKDH00=LS_CKDH00 and CKDH00 is not null and SJFYRQ is null and rownum=1; exception when others then LS_FYRQSJ:=' '; end; --update YF_YZYPSQ set ZLFWMC=to_char(to_date(FYRQ00||FYSJ00,'YYYYMMDDHH24:MI:SS')+round(DBMS_RANDOM.value(1,10))/1440,'YYYYMMDDHH24:MI:SS') where CKDH00=LS_CKDH00 and CKDH00 is not null and SJFYRQ is null; if LS_FYRQSJ<>' ' then update YF_YZYPSQ set SJFYRQ=substr(LS_FYRQSJ,1,8), SJFYSJ=substr(LS_FYRQSJ,9,8), SJFYR0=FYR000,ZLFWMC='' where CKDH00=LS_CKDH00 and CKDH00 is not null and SJFYRQ is null; end if; end if; if PCOMMIT='Y' then commit; end if; exception when others then raise_application_error(-20002,substrb(nvl(sqlerrm, '原因不明出错')||'!*',1,240)); end;