CREATE OR REPLACE TRIGGER tr_bm_yd0000_binsert BEFORE INSERT OR UPDATE ON bm_yd0000 REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW DECLARE QYNBF0 XT_XTCS00.VALUE0%TYPE; vCOUNT Integer; vYPBM varchar(20); FirstLter varchar(1); V_YYGXH VARCHAR(3); V_SFZGDJSFWK xt_xtcs00.value0%type; -- MODIFICATION HISTORY -- Person Date Comments -- YANGH 2006-09-26 启用农本方参数后,浓缩比例不能为空;未启用默认为零 -- YANGH 2007-03-07 省二二化库使用的药品,药品编码必须是E打头 -- YANGH 2007-08-01 如果药品未输入浓缩比例,默认为1 -- YANGH 2007-09-18 对于药品的政府最高定价字段,如果该字段非空,则不允许改成空值。 -- chenyw 2009-09-16 对于药品的政府最高定价字段,如果该字段非空是否允许为空;用参数 -- csf 20100115 保存前判断是否有维护YYDW00,YYZHL0,若没有按剂量单位处理 -- --------- ---------- -------------------------------------------------- BEGIN begin select trim(value0) into V_SFZGDJSFWK from xt_xtcs00 where name00='YK_ZFZGDJSFWK'; exception when others then V_SFZGDJSFWK:='N'; end; BEGIN SELECT Trim(VALUE0) INTO QYNBF0 FROM XT_XTCS00 WHERE NAME00='YK_QYNBFJK'; EXCEPTION WHEN OTHERS THEN QYNBF0:='N'; END; BEGIN SELECT TRIM(VALUE0) INTO V_YYGXH FROM XT_XTCS00 WHERE NAME00='YK_YYGXH'; EXCEPTION WHEN OTHERS THEN V_YYGXH:='0'; END; FirstLter:=SubStr(:NEW.YPBM00,1,1); if V_SFZGDJSFWK='N' then if (:NEW.ZFZGDJ IS NULL) and (:OLD.ZFZGDJ IS NOT NULL) then RAISE_APPLICATION_ERROR(-20910, '政府最高定价不允许修改为空值*'||TO_CHAR(SQLCODE)||SQLERRM); END IF; end if; if (QYNBF0='Y') AND (Trim(:NEW.NSBL00) IS NULL) then :NEW.NSBL00:=1; --RAISE_APPLICATION_ERROR(-20910, '更新表BM_YD0000时发生错误,浓缩比例输入有误*'||TO_CHAR(SQLCODE)||SQLERRM); END IF; if (QYNBF0='Y') AND (:NEW.NSBL00 =0) then RAISE_APPLICATION_ERROR(-20910, '更新表BM_YD0000时发生错误,浓缩比例输入有误*'||TO_CHAR(SQLCODE)||SQLERRM); END IF; if QYNBF0='N' AND (Trim(:NEW.NSBL00) IS NULL) then :NEW.NSBL00:=1; END IF; IF V_YYGXH='4' THEN --二化库使用的药品,药品编码必须是E打头 YANGH 20070307 vYPBM:= :NEW.YPBM00; SELECT COUNT(*) INTO vCOUNT FROM BM_BMBM00 WHERE YYID00='B' AND BMXZ00='6' AND BMBH00= :NEW.YKBMBH ; if (vCOUNT>0) and (FirstLter<>'E') then :NEW.YPBM00:='E'||vYPBM; end if; END IF; if :new.YYDW00 is null then :new.YYDW00:=:new.JLDW00; end if; if :new.YYZHL0 is null then :new.YYZHL0:=1; end if; END TR_BM_YD0000_BFINS; /