深入理解Oracle触发器类型(oracle触发器类型)

Oracle触发器是用来更改表中数据状态,或者在表中进行指定操作之前或之后执行某些操作的一种对象,由触发器不同的类型,触发器的作用也各有不同。

Oracle触发器主要分为四种类型:行触发器、表级触发器、在数据库级的触发器和在Session级的触发器。

1. 行触发器。

行触发器最为常用,对插入、更新或删除表中特定行的操作进行响应,如每当有一笔待支付的订单,系统就会触发行触发器,进行自动扣款操作。

例如:

CREATE OR REPLACE TRIGGER “TRG_AFTER_UPDATE_ACCOUNT”

AFTER UPDATE

ON ACCOUNT

FOR EACH ROW

BEGIN

IF :new.BALANCE

INSERT INTO LOG_ACCOUNT_UPDATE (account_name, change_amount, current_balance, change_date)

VALUES (:new.name, :new.BALANCE, :new.BALANCE + :old.BALANCE, SYSDATE);

END IF;

END;

/

2. 表级触发器。

表级触发器是响应插入、更新、删除或向表添加列的操作,如每次插入数据时就运行表级触发器,那么可以实现累计表中插入新行的数量,并将此结果放在另一张表中记录。

例如:

CREATE OR REPLACE TRIGGER “TRG_AFTER_INSERT_ACCOUNT”

AFTER INSERT

ON ACCOUNT

BEGIN

UPDATE TOTAL_INSERT_COUNT

SET count=count+1

WHERE type=’ACCOUNT’;

END;

/

3. 数据库级触发器。

数据库级触发器是响应数据库本身操作,如连接数据库、数据库重启等,这也可以防止意外的触发器执行,告诉你有多少连接到数据库、数据库的运行情况等。

例如:

CREATE OR REPLACE TRIGGER “TRG_SHUTDOWN_DATABASE”

BEFORE SHUTDOWN ON DATABASE

BEGIN

INSERT INTO LOG_DATABASE_ACTION (action, date_time)

VALUES(‘Shutdown’, SYSDATE);

END;

/

4. Session 级触发器

Session 级触发器是响应连接到数据库的 Session 的操作,利用 Session 级触发器,你可以知道有多少 User 登陆到数据库、某User 登陆之后进行了什么操作等。

例如:

CREATE OR REPLACE TRIGGER “TRG_AFTER_LOGON”

AFTER LOGON ON DATABASE

BEGIN

INSERT INTO LOG_USER_LOGIN (username, date_time)

VALUES(SYS_CONTEXT(‘user_session’,’login_name’), SYSDATE);

END;

/

以上就是对Oracle触发器类型的深入理解,它们各有不同,而且能够帮助我们更好地管理数据库,帮助我们更正确地执行数据库操作,提高数据库的执行效率。


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