Oracle数据库中触发器的类型简介(oracle触发器类型)

Oracle数据库中触发器(Database Trigger)可以用来在特定条件下执行前后回调函数,实现对数据库数据执行自动化处理,相比传统SQL语句实现某种效果而言,触发器使得操作更加简洁便捷。在Oracle数据库中,触发器可以根据实际业务需求支持如下几种不同的类型:

### 1.Row Level Trigger

Row Level Trigger可以实现按行触发,即在特定操作在数据库表中的行上被执行时,可以执行程序指定的进一步操作,相比之下效率和灵活性更高。例如,如下示例代码将在数据表Employees上创建一个按行触发的触发器,执行特定的操作:

“`sql

CREATE OR REPLACE TRIGGER salary_audit

BEFORE INSERT OR UPDATE ON Employees

FOR EACH ROW

DECLARE

l_change_value NUMBER;

BEGIN

IF INSERTING THEN

l_change_value := :new.salary;

ELSE

l_change_value := :new.salary – :old.salary;

END IF;

IF l_change_value > 10000 THEN

INSERT INTO audit_salary_changes(user_name, salary_change_amt)

VALUES (USER, l_change_value);

END IF;

END;


### 2.Statement Level Trigger

Statement Level Trigger和Row Level Trigger相比,行触发得实现更加通用,直接针对整个操作执行回调函数,没有行级别的限制。例如,如下示例代码将在数据表Employees上创建一个按语句触发的触发器,执行特定的操作:

```sql
CREATE OR REPLACE TRIGGER employee_salaries
AFTER INSERT OR UPDATE OR DELETE ON Employees
DECLARE
l_change_value NUMBER;
BEGIN
IF UPDATING THEN
SELECT :new.salary - :old.salary INTO l_change_value FROM dual;
ELSIF DELETING THEN
l_change_value := -1 * :old.salary ;
ELSIF INSERTING THEN
l_change_value := :new.salary ;
END IF;
INSERT INTO audit_salary_changes(user_name,salary_change_amt)
VALUES (USER, l_change_value );
END;

### 3.Combined (or Combined DML) Trigger

Combined Trigger结合了Row Level Trigger和Statement Level Trigger的功能,可以根据不同的执行类型在合理的范围内执行回调函数。例如,如下示例代码将在数据表Employees上创建一个综合触发器,执行特定的操作:

“`sql

CREATE OR REPLACE TRIGGER salary_audit

BEFORE INSERT OR UPDATE OR DELETE ON Employees

FOR EACH ROW

DECLARE

l_change_value NUMBER;

BEGIN

IF UPDATING THEN

SELECT :new.salary – :old.salary INTO l_change_value FROM dual;

ELSIF DELETING THEN

l_change_value := -1 * :old.salary ;

ELSIF INSERTING THEN

l_change_value := :new.salary ;

END IF;

IF l_change_value > 10000 THEN

INSERT INTO audit_salary_changes(user_name,salary_change_amt)

VALUES (USER, l_change_value );

END IF;

END;


综上所述,Oracle数据库提供了Row Level Trigger,Statement Level Trigger和Combined Trigger三种触发器类型,可以根据实际业务选择合适的类型,以实现所需的其他操作。相比于普通SQL语句实现,触发器可以节省开发时间,迅速实现功能。

数据运维技术 » Oracle数据库中触发器的类型简介(oracle触发器类型)