触发器
来源:互联网 发布:c语言休眠函数 编辑:程序博客网 时间:2024/04/29 21:59
在ORCLE系统中,每个触发器被DML操作触发时,会产生两个特殊的变量:OLD和:NEW,分别代表某数据记录行在修改前和修改后的值。这两个变量都是系统变量,由Oracle系统管理,存储在内存中,不允许用户直接对其进行修改。:OLD和:NEW变量的结构总是与执行DML操作的表的结构相同。当触发器工作完成以后,这两个变量也随之消失。这两个变量是只读的,即用户不能向这两个变量写入内容,但可以引用变量中的数据。
:OLD变量用于存储DELETE和UPDATE操作所影响的行的副本。当执行DELETE或UPDATE操作时,行从触发表中被删除,并传输到:OLD变量中。
:NEW变量用于存储INSERT和UPDATE操作所影响的行的副本。当执行INSERT或UPDATE操作时,新行被同时添加到:NEW变量和触发表中,:NEW变量中的行即为触发表中的新行的副本。
插入型触发器
在产品表PRODUCT中插入数据记录时需要进行如下检查:当试图往PRODUCT表中插入在产品类别表CATEGORY中并不存在的产品类别编号CATEGORYID时,返回一条表示错误的消息;否则显示表示正确的消息。
CREATE OR REPLACE TRIGGER TRG_ADDPRODUCT
BEFORE INSERT
ON PRODUCT
FOR EACH ROW
DECLARE
counter INTEGER;
BEGIN
SELECT COUNT(*) INTO counter
FROM CATEGORY
WHERE CATEGORYID=:NEW.CATEGORYID;
IF counter>0 THEN
DBMS_OUTPUT.PUT_LINE('添加新产品成功');
ELSE
DBMS_OUTPUT.PUT_LINE('产品编号'|| :NEW.CATEGORYID||'在产品类别表CATEGORY中不存在');
END IF
END TRG_ADDPRODUCT;
删除型触发器
当需要删除订单表ORDERS的数据记录时,需要同时删除订单明细表ORDERDETAILS的相关数据记录,并显示相应的消息
CREATE OR REPLACE TRIGGER TRG_DELETEORDER
AFTER DELETE
ON ORDERS
FOR EACH ROW
BEGIN
DELETE FROM ORDERDETAILS OD
WHERE OD.ORDERID=:OLD.ORDERID;
DBMS_OUTPUT.PUT_LINE('删除订单及订单明细信息成功');
END TRG_ADDPRODUCT;
更新触发器
当需要更新产品表PRODUCT的数据记录时,需要同时判断该数据记录的产品类别编号是否存在,若存在,则显示表示正确的消息;否则显示表示错误的信息。
CREATE OR REPLACE TRIGGER TRG_UPDATEPRODUCT
BEFORE UPDATE
ON PRODUCT
FOR EACH ROW
DECLARE
counter INTEGER;
BEGIN
SELECT COUNT(*) INTO counter
FROM CATEGORY
WHERE CATEGORYID=:NEW.CATEGORYID;
IF counter>0 THEN
DBMS_OUTPUT.PUT_LINE('更新产品信息成功');
ELSE
DBMS_OUTPUT.PUT_LINE('产品类别编号'||:NEW.CATEGORYID||'不存在');
END IF;
END TRG_ADDPRODUCT;
混合型触发器
当需要对用户方案的产品表PRODUCT执行DML操作时,需要根据不同的DML操作返回不同的信息
CREATE OR REPLACE TRIGGER TRG_INS_UPD_DEL_PRODUCT
BEFORE INSERT OR UPDATE OR DELETE
ON PRODUCT
FOR EACH ROW
BEGIN
IF INSERTING THEN
DBMS_OUTPUT.PUT_LINE('新产品的名称是'||:NEW.PRODNAME);
ELSE UPDATING THEN
DBMS_OUTPUT.PUT_LINE('产品的原有名称是'||:OLD.PRODNAME);
ELSE
DBMS_OUTPUT.PUT_LINE('被删除产品的名称是'||:OLD.PRODNAME);
END IF
END TRG_INS_UPD_DEL_PRODUCT;
- 触发器
- 触发器
- 触发器
- 触发器
- 触发器
- 触发器
- 触发器
- 触发器
- 触发器
- 触发器
- 触发器
- 触发器
- 触发器
- 触发器
- 触发器
- 触发器
- 触发器
- 触发器
- Map用法详解(四)
- 流数据处理学习2-流数据处理和其他框架的比较
- springMVC+freemarker请求Controller错误
- System.map
- 用xCode制作framework
- 触发器
- jquery easyui DataGrid 数据表格 属性
- Python 代码调试技巧
- 华为技术有限公司
- override
- 八皇后问题
- SAP内存/ABAP内存/共享内存区别(收集来的)
- OAuth入门指南 - 协议工作流
- 详解struts2中struts.properties