CREATE OR REPLACE TRIGGER TR_YJ_YW0000_AUPD_SX AFTER INSERT ON YJ_YW0000 REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW WHEN (NEW.XMZT00 IN ('0') AND NEW.MZZYBZ = '0') DECLARE VSXDH00 XK_SXSQ00.SQDH00%TYPE; VPARAMS VARCHAR2(188); VZYBRXX SF_BRXXB0%ROWTYPE; VCOUNTER NUMBER; VKSMC00 BM_BMBM00.BMMC00%TYPE; ECUSTOM EXCEPTION; VLCZDMC XK_SXSQ00.LCZDMC%TYPE; VSXSZ00 XK_SXSQ00.SXSZ00%TYPE; VSXCF00 XK_SXSQ00.SXCF00%TYPE; VCFSFMR XT_XTCS00.VALUE0%TYPE; PRAGMA AUTONOMOUS_TRANSACTION; --XM RQ BZ --sechen 20081020 增加门诊输血 BEGIN SELECT NVL(MAX(TRIM(VALUE0)), 'N') INTO VCFSFMR FROM XT_XTCS00 WHERE NAME00 = 'XK_SXXZSFMR'; --成分是否默认 IF :NEW.XMZT00 = '0' AND :NEW.ZLXMID <> 0 THEN --执行输血医嘱 SELECT COUNT(*) INTO VCOUNTER FROM XT_XTCS00 WHERE NAME00 = 'XK_SXZLXMID' AND ((INSTRB(',' || TRIM(VALUE0) || ',', ',' || TO_CHAR(:NEW.ZLXMID) || ',') > 0) OR (INSTRB(',' || TRIM(BZ0000) || ',', ',' || TO_CHAR(:NEW.ZLXMID) || ',') > 0)); --判断指定的输血用项目 IF VCOUNTER > 0 THEN SELECT TO_NUMBER(NVL(TRIM(MAX(VALUE0)), '0')) INTO VCOUNTER FROM XT_XTCS00 WHERE NAME00 = 'XK_XKBMBH'; --判断血库内部编号 IF VCOUNTER = 0 THEN RETURN; END IF; SELECT LPAD(SQ_XK_SXSQ00_SQDH00.NEXTVAL, 6, '0') INTO VSXDH00 FROM DUAL WHERE ROWNUM = 1; --产生输血申请单号 BEGIN SELECT ZDMC00 INTO VLCZDMC FROM YS_BRZDXX WHERE GHID00 = :NEW.ZYGHID; --病人诊断 EXCEPTION WHEN OTHERS THEN VLCZDMC := ''; END; SELECT * INTO VZYBRXX FROM SF_BRXXB0 X WHERE X.GHID00 = :NEW.ZYGHID; SELECT BMMC00 INTO VKSMC00 FROM BM_BMBM00 WHERE BMBH00 = VZYBRXX.JZKS00; --取就诊科室 --生成输血申请 IF VCFSFMR = 'Y' THEN VSXSZ00 := '常规'; SELECT NVL(MAX(MC0000), '') INTO VSXCF00 FROM BM_TYZD00 WHERE ZDMC00 = '输血成分' AND YXBZ00 = '1' AND INSTR(:NEW.ZLXMJC, MC0000) > 1 AND ROWNUM = 1; ELSE VSXSZ00 := ''; VSXCF00 := ''; END IF; INSERT INTO XK_SXSQ00 (XKBMBH, SQDH00, ZYID00, BRID00, KSMC00, CH0000, LRRXM0, LRRQ00, LRSJ00, SQZT00, YZMXID, SXSL00, SXDW00, SQYSBH, SQRQ00, SQSJ00, CYRQ00, BQMC00, LCZDMC, SXSZ00, SXCF00, MZZYBZ) SELECT VCOUNTER, VSXDH00, VZYBRXX.GHID00, VZYBRXX.BRID00, VKSMC00, 0, :NEW.LRXM00, TO_CHAR(SYSDATE, 'yyyymmdd'), TO_CHAR(SYSDATE, 'hh24:mi:ss'), '0', :NEW.YJDJH0, :NEW.SL0000, :NEW.DW0000, :NEW.KDYS00, TO_CHAR(SYSDATE, 'yyyymmdd'), TO_CHAR(SYSDATE, 'hh24:mi:ss'), TO_CHAR(SYSDATE, 'yyyymmdd'), BMMC00, VLCZDMC, VSXSZ00, VSXCF00, '门诊' FROM BM_BMBM00 WHERE BMBH00 = VZYBRXX.JZKS00; --未插入过病人信息的,第一次要插入病人信息 INSERT INTO XK_BRXX00 (BRID00, MRN000, ZYH000, XM0000, XB0000, CSRQ00, MZZYBZ) SELECT VZYBRXX.BRID00, 0, VZYBRXX.GHH000, VZYBRXX.XM0000, VZYBRXX.XB0000, VZYBRXX.CSRQ00, '门诊' FROM DUAL WHERE ROWNUM = 1 AND NOT EXISTS (SELECT 1 FROM XK_BRXX00 WHERE BRID00 = VZYBRXX.BRID00); END IF; END IF; COMMIT; EXCEPTION WHEN OTHERS THEN RAISE_APPLICATION_ERROR(-20001, SUBSTR(NVL(SQLERRM, '原因不明出错') || '!*' || VPARAMS, 1, 220)); END; /