Oracle数据库触发器类型简介(oracle触发器类型)
Oracle数据库触发器(Trigger)是一种特殊的数据库存储过程,用于识别特定的数据库行为,而使程序能够 在发生这些指定的数据库行为时执行指定的工作。这是Oracle的一个强大的功能,可以用来在表发生变化时自动完成一些工作,从而减少程序员的编程量。Oracle数据库提供了3中触发器类型:行触发器,DDL触发器和 DML触发器。
行触发器会在发生指定行操作之前或之后调用,具体取决于触发器类型。例如,行触发器可以在插入表中字段之前或之后进行特定操作,例如检查表中的记录是否已存在,或者更改字段值以确保其有效性。比如:
CREATE OR REPLACE TRIGGER trigger_name
BEFORE INSERT ON table_name FOR EACH ROW
BEGIN IF (:NEW.column_name IS NULL) THEN
:NEW.column_name := 0; END IF;
END;/
本示例中的触发器在插入行之前激活,此触发器会检查是否指定的字段为空,如果是,则使用0填充该字段。
DDL触发器指的是在执行发生数据定义操作时调用的触发器,例如删除表,更改表结构等。它是用来在发生某些数据定义操作时完成指定的工作,而不需要显式编写程序来创建新表或更改现有表的结构。比如:
CREATE OR REPLACE TRIGGER trigger_name
AFTER CREATE ON SCHEMABEGIN
EXECUTE IMMEDIATE 'GRANT SELECT, INSERT, UPDATE ON new_table TO user_name';END;
/
本代码中的触发器在创建新表时被激活,该触发器将为用户分配 SELECT,INSERT和UPDATE权限。
DML触发器是指在发生数据操作语言(DML)操作时调用的触发器,例如INSERT,UPDATE和DELETE等。这些触发器用于完成指定的任务,而不需要额外的编程,比如自动生成编号,检查自定义的业务规则等等。比如:
CREATE OR REPLACE TRIGGER trigger_name
BEFORE DELETE ON table_name FOR EACH ROW
BEGIN IF (:OLD.column_name != 0) THEN
RAISE_APPLICATION_ERROR(-20001, 'Cannot delete with non-zero value'); END IF;
END;/
本示例中的触发器会在删除表中字段内容之前激活,这个触发器会检查字段内容是否为0,如果不是,则将错误发送给用户,防止误删除数据。
总之,Oracle数据库提供了行角度器、DDL触发器和DML触发器三种触发器类型,用于自动完成特定的表数据变化时的任务,有效地节省了程序员的编程工作量。