CREATE TRIGGER SD_HOSPITAL.TR_BQ_BRZDXX_BINS BEFORE INSERT OR UPDATE ON SD_BQ.BQ_BRZDXX REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW declare ls_ZDRQ00 BQ_BRZDXX.ZDRQ00%type; ls_error varchar2(100); Ecustom EXCEPTION; VD_CZID00 XT_XTCZRZ.CZID00%type; -- MODIFICATION HISTORY -- Person Date Comments -- zhr 2009.10.20 同步修改ZY_BRXXB0.RYZD00和RYZDMC -- zhangwz 2011.09.21 在修改的时候如果原有诊断有传染病登记ID时,诊断变化的同时置空CRDJID,要不然变化后的诊断又是传染病时不会提示登记. by ZYYS-20110920-001. -- dsm 2012.06.26 ZDRQ00='00000000'找不到程序bug的入口,所以在触发器上限制 for ZYYS-20120625-001 -- dsm 2012.09.10 ZDRQ00='00000000'直接置空值 与ZYYS-20120814-001 一起归档 BEGIN IF :NEW.ID0000 IS NULL or :new.ID0000=0 THEN SELECT SQ_BQ_BRZDXX_ID0000.NEXTVAL INTO :NEW.ID0000 FROM DUAL; END IF; if :new.ZDLB00='2' then update ZY_BRXXB0 set RYZD00=:new.ZDM000,RYZDMC=:new.ZDMC00 where ZYID00=:new.ZYID00; end if; if UPDATING then begin if (:old.ZDM000<>:new.ZDM000) and (:new.CRDJID is not null) then :new.CRDJID:=''; end if; end; end if; if :NEW.ZDRQ00='00000000' then :NEW.ZDRQ00:=''; end if; if nvl(trim(:NEW.ZDRQ00),' ')<>' ' and not (:NEW.ZDRQ00 is null ) then begin ls_ZDRQ00:=to_char(to_date(:NEW.ZDRQ00,'YYYYMMDD'),'YYYYMMDD'); exception when others then SELECT SQ_XT_XTCZRZ_ID0000.NEXTVAL INTO VD_CZID00 FROM DUAL WHERE ROWNUM=1; Insert Into XT_XTCZRZ(CZID00,CZTable,CZLX00,CZRYBM,CZNR00,DATAID) Values(VD_CZID00,'BQ_BRZDXX',1,0,'修改诊断:'||:new.ZDRQ00,:new.id0000); :NEW.ZDRQ00:=to_char(sysdate,'YYYYMMDD') ; end; end if; if nvl(trim(:NEW.ZDRQ00),' ')<>' ' and not (:NEW.ZDRQ00 is null ) then begin ls_ZDRQ00:=to_char(to_date(:NEW.ZDRQ00,'YYYYMMDD'),'YYYYMMDD'); exception when others then ls_error:='诊断日期格式不对'; raise Ecustom; end; end if; exception when Ecustom then raise_application_error(-20010,substr(ls_error||'!*',1,220)); when others then raise_application_error(-20002,substr(nvl(sqlerrm, '原因不明出错')||'!*',1,220)); END; /