深入浅出 Oracle 触发器类型(oracle触发器类型)

Oracle 触发器是一种强大的存储过程,可以在表和视图上定义,并在表上出发或激活它们。它们在表上执行当然DML语句(包含:插入,更新,删除)时被调用,它们将处理新的或更新的行,而无需外部程序进行支持。Oracle 触发器有三种类型,分别是行级触发器、表级触发器和数据库级触发器。

首先,行级触发器是Oracle 中最常用的一种触发器类型。行级触发器创建在一个表的行级操作上,它会在有新的行插入,一条行被更新或被删除时自动触发。行级触发器一般是比较简单的,且操作产生的影响只会只有当前行,下面是一个行级触发器:

“`sql

CREATE OR REPLACE TRIGGER trg_emp_before_insert

BEFORE INSERT ON emp

FOR EACH ROW

BEGIN

:new.empno := emp_seq.nextval;

END;

这个行级触发器定义在EMP表上,每当新的行插入时,该触发器就会在插入操作前触发,并将使用EMP_SEQ.NEXTVAL 序列生成的值赋值给行的EMPNO列。
其次,表级触发器是Oracle 中较少使用的一种触发器类型,表级触发器将命名为表级活动,由于表级触发器只涉及一种操作,所以它们可以被用来进行表级约束,用声明性方法维护数据完整性。下面是一个表级触发器:

```sql
CREATE OR REPLACE TRIGGER trg_emp_check
BEFORE INSERT OR UPDATE ON emp
BEGIN
IF :new.sal > 10000 THEN
RAISE_APPLICATION_ERROR(-20001, 'Sal should be less than 10K.');
END IF;
END;

该触发器检查每条记录的SAL列的值,如果SAL的值大于10000,则抛出ORA-20001错误。

最后,数据库触发器是Oracle 中最重要的一种触发器类型,它们可用于响应在整个Oracle 数据库中受检查的活动,例如调用一个函数或过程,开启一个job,提交一组DML语句,创建sys级视图,发送邮件等。下面是一个数据库级触发器:

“`sql

CREATE OR REPLACE TRIGGER trg_admin_login

AFTER LOGON ON DATABASE

BEGIN

IF (SYS_CONTEXT(‘USERENV’,’SESSION_USER’) = ‘SYS’) THEN

RAISE_APPLICATION_ERROR(-20001, ‘Login is not allowed.’);

END IF;

END;

该触发器将在任何用户登录到数据库时被触发,它检查当前登录的用户是否为系统用户,如果是,则抛出ORA-20001错误,拒绝其登录。
总之,Oracle 触发器是一种功能强大的存储过程,它可以在表和视图上定义,在表上对插入,更新或删除行时被调用。Oracle 触发器一般分为三种:行级触发器、表级触发器和数据库级触发器,每种触发器都有各自的用途,在实施大型应用程序时,Oracle 触发器将是一个有用的工具,可以提升应用程序的性能和灵活性。

数据运维技术 » 深入浅出 Oracle 触发器类型(oracle触发器类型)