灵活操作:Oracle触发器的四种类型(oracle触发器类型)
Oracle触发器是指在特定的时间触发某些事件,自动执行某些指令的对象.触发器可以为Oracle数据库提供更灵活的数据控制能力,可以自动执行SQL语句,实现更强大的功能.Oracle触发器共有四种类型:
1.Row触发器:在表内每行发生变化时触发,也可以称为行级触发器。它可以在记录发生任何变化时(比如更新,插入或者删除)被触发,并执行定义的DML语句:
CREATE OR REPLACE TRIGGER tr_emp
AFTER INSERT OR UPDATE OR DELETE
ON EMP
FOR EACH ROW
DECLARE
BEGIN
INSERT INTO EMP_LOG values(:OLD.EMPNO,:OLD.ENAME,SYSDATE);
END;
2.Statement触发器:当数据表中的某一行或者多行发生变化时,就会触发该触发器,它负责处理一组行;它可以在DML语句分别更新,插入或者删除一行或多行时被触发:
CREATE OR REPLACE TRIGGER tr_emp
AFTER INSERT OR UPDATE OR DELETE
ON EMP
BEGIN
INSERT INTO EMP_LOG values(:OLD.EMPNO,:OLD.ENAME,SYSDATE);
END;
3.BEFORE触发器:在定义的数据库中发生特定操作时,BEFORE触发器允许我们在执行DML操作之前验证数据的有效性:
CREATE OR REPLACE TRIGGER tr_emp
BEFORE UPDATE
ON EMP
FOR EACH ROW
BEGIN
IF :NEW.AGE>30 THEN
raise_application_error(-20087,’ age must
END IF;
END;
4.登录触发器(Login Trigger):登录触发器,又称登录事件触发器,它可以在用户登录数据库时启动和执行一些代码,它可以把你的数据库与其他外部事件联系在一起,如日历中的特定日期:
CREATE OR REPLACE TRIGGER Login_Trigger
AFTER LOGON ON DATABASE
BEGIN
IF TO_CHAR(SYSDATE) >=’20190101’ THEN
DBMS_OUTPUT.PUT_LINE(‘HAPPY NEW YEAR!’);
ELSE
DBMS_OUTPUT.PUT_LINE(‘Hey!Take a rest,today is ’ ||to_Char(sysdate));
END IF;
END;
综上,Oracle触发器共有四种类型:Row触发器,Statement触发器,BEFORE触发器和登录触发器。它们通过执行细微的操作来达到灵活控制数据库行为的目的。Oracle触发器可以帮助数据库程序员完成系统管理以及数据完整性检查方面的自动化程度更高的开发任务.