在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.PU