国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

一個關于DATEBASE TRIGGER的問題解析

2024-07-21 02:34:04
字體:
來源:轉載
供稿:網友

  這是我整理最近的測試和筆記后,所記錄的一種小寫DB TRIGGER的方法,只供岑考。
  
  要求:一異動表中插入入庫記錄時,將數量加到其庫存表中的入庫總數中;當異動表中插入出庫記錄時,將數量加到其庫存表中的出庫總數中;入庫和出庫都需要計算庫存表中的庫存數。
  
  CREATE OR REPLACE TRIGGER "TRG_CHGE" BEFORE INSERT OR DELETE OR UPDATE ON LY.FY_CHGE REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW
  DECLARE
  V_PROD_NO FY_PROD.PROD_NO%TYPE;
  T_IMARK  NUMBER(1);--入庫加減碼
  T_OMARK  NUMBER(1);
  T_SMARK  NUMBER(1);
  BEGIN
  
  --如不考慮產品編碼及異動類別會改變的情況
  --不考慮庫存出現負數的情況
  --二者均在form中控制
  
  IF NVL(:NEW.CHGE_TYPE,:OLD.CHGE_TYPE) = 'I' THEN
  T_IMARK := 1;
  T_OMARK := 0;
  T_SMARK := 1;
  ELSE
  T_IMARK:=0;
  T_OMARK:=1;
  T_SMARK:=-1;
  END IF;
  SELECT PROD_NO INTO V_PROD_NO
  FROM FY_STOC
  WHERE PROD_NO=NVL(:NEW.PROD_NO,:OLD.PROD_NO);
  IF SQL%NOTFOUND THEN
  INSERT INTO FY_STOC (PROD_NO,IN_QTY,OUT_QTY,STOC_QTY)
  VALUES(NVL(:NEW.PROD_NO,:OLD.PROD_NO),NVL(:NEW.QTY,:OLD.QTY)*T_IMARK,NVL(:NEW.QTY,:OLD.QTY)*T_OMARK,NVL(:NEW.QTY,:OLD.QTY)*T_SMARK);
  END IF;
  IF SQL%FOUND THEN
  UPDATE FY_STOC SET
  IN_QTY=NVL(IN_QTY,0)+(NVL(:NEW.QTY,0)-NVL(:OLD.QTY,0))*T_IMARK,
  OUT_QTY=NVL(OUT_QTY,0)+(NVL(:NEW.QTY,0)-NVL(:OLD.QTY,0))*T_OMARK,
  STOC_QTY=NVL(STOC_QTY,0)+(NVL(:NEW.QTY,0)-NVL(:OLD.QTY,0))*T_SMARK
  WHERE PROD_NO=NVL(:NEW.PROD_NO,:OLD.PROD_NO);
  END IF;
  END;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 承德县| 博乐市| 南投市| 普兰县| 南昌县| 涟源市| 三穗县| 安吉县| 香河县| 鸡东县| 潼南县| 喜德县| 金沙县| 平阳县| 阜平县| 库车县| 昭苏县| 肥城市| 个旧市| 广元市| 临颍县| 霍林郭勒市| 开原市| 宜良县| 大厂| 札达县| 顺平县| 贡觉县| 平果县| 南开区| 铁力市| 隆化县| 东兴市| 图木舒克市| 新疆| 新绛县| 襄城县| 万盛区| 岳普湖县| 衡东县| 乌什县|