深入理解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触发器类型的深入理解,它们各有不同,而且能够帮助我们更好地管理数据库,帮助我们更正确地执行数据库操作,提高数据库的执行效率。