网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.理解oracle的网络结构 解决连接问.
.编写叙述程式 (Scripts): .BAT 档.
.返回指定行数之间的查询结果.
.Solaris 下的 oracle 的基本操作.
.关于lob字段的处理(通过modplsql.
.oracle最重要的9个动态性能视图.
.Oracle9iAS下J2EE应用程序部署.
.9iR2 的Compress Table 的研究.
.用Oracle的SQL*Plus工具创建HTML.
.Oracle rac安装过程详解(四).
.Oracle9i初始化参数中文说明10.
.高效实现数据仓库的七个步骤.
.Oracle创造Linux平台TPC-C测试纪.
.编写一个接受变量的存储过程.
.带你深入了解Oracle数据库的热备.
.Java使用Oracle遇到的最大游标超.
.ORACLE问题与解答.
.浅析如何掌握了解SQL Server的锁.
.取某一用户的密码,再原封不动的.
.利用oracle高级复制功能实现数据.

一个关于DATEBASE TRIGGER的问题解析

发表日期:2008-2-9



  这是我整理最近的测试和笔记后,所记录的一种小写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;
上一篇:回滚段表空间数据文件丢失或损坏处理方法(2) 人气:549
下一篇:oracle9i中Rman的备份使用点滴 人气:772
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐