Oracle触发器:从DML到DDL类型(oracle触发器类型)
Oracle触发器是一种数据库对象,可以在用户对数据库中包含的表进行Data Manipulation Language (DML)和Data Definition Language (DDL) 操作时自动引发的一系列动作。它是创建的,使某些特定的变化发生,而不需要应用程序和/或用户显示地指定任何进一步的操作。Oracle触发器通常情况下分为两类:DML(Data Manipulation Language)类型和DDL(Data Definition Language)类型。
DML类型的Oracle触发器是基于一组DML语言(包括insert,update,delete)运行的触发器,可以在这些语言发生时自动触发。这些触发器通常用来验证插入数据的正确性和完整性,并执行记录更新操作或执行日志操作以跟踪数据修改。
例如,假设我们有一个表格存储学生信息,我们可以使用Oracle触发器执行以下操作:
CREATE OR REPLACE TRIGGER insert_student_data
BEFORE INSERT ON student_grade FOR EACH ROW
BEGIN IF :NEW.grade
RAISE_APPLICATION_ERROR(-20001, 'Grade should not be negative'); ELSE
UPDATE student_scale SET level = (:NEW.grade + 1)/2;
END IF;END;
/
上面的Oracle触发器可以在插入学生成绩之前检查输入成绩是否为负数,如果是就引发异常报错,否则根据输入成绩更新学生等级字段。
另一种Oracle触发器类型是DDL类型,这种类型的触发器是在一组DDL语言(包括create,alter,drop,truncate)上触发的。这类触发器可以在创建和删除表格,用户,列,索引等时触发,或者在进行系统级变更时也可以被触发。
例如,假设我们有一个表,存储学生的个人信息,并且每次在表中插入记录时都需要将学生的学号存放至另一个表或文件中,那么我们可以使用以下代码创建Oracle触发器来实现此需求:
CREATE OR REPLACE TRIGGER on_insert_student_data
AFTER INSERT ON student_data FOR EACH ROW
BEGIN INSERT INTO student_id VALUES (:NEW.student_id);
END;/
上面的触发器将会在每次数据库表student_data中插入记录后,将学生的学号存入student_id表中。
总的来说,Oracle触发器是一种功能强大且易于使用的数据库对象,它可以帮助节省时间和精力,更高效地处理和监控数据库表中的信息。它可以通过DML和DDL触发,使数据库操作能够在不知不觉中完成,更好地控制对数据库表的更改。