Oracle触发器类型及其应用(oracle触发器类型)
Oracle数据库是一种关系型数据库管理系统,支持强触发器功能,其中包括三种不同类型的触发器,分别是行触发器、覆盖式触发器和语句级触发器。
行触发器:行触发器允许您在表中添加、更新或删除行时触发执行的PL / SQL代码。行触发器允许您修改触发器操作期间插入或更新的行。通常行触发器有助于维护表的完整性和一致性。
例:
CREATE OR REPLACE TRIGGER trg_product_update
BEFORE UPDATE ON product
FOR EACH ROW
BEGIN
IF :new.price
SELECT clr_product_price_log(‘PRICE_LOWER’, :new.prod_id,
:new.price, :old.price)
INTO :new.price_update
FROM dual;
END IF;
END trg_product_update;
/
覆盖式触发器:覆盖式触发器允许在表中任何插入,更新或删除操作发生时触发执行的PL / SQL代码。与行触发器相比,覆盖式触发器不会更改触发器操作期间插入或更新的行。此外,它们只会引发一次,而不管表中改变了多少行。
例:
CREATE OR REPLACE TRIGGER trg_insert_log
AFTER INSERT ON product
FOR EACH ROW
BEGIN
INSERT INTO prod_log
VALUES (:new.prod_id, :new.name,
SYSDATE, ‘Inserted’);
END trg_insert_log;
/
语句级触发器:语句级触发器允许您在表上下文中执行任何INSERT、UPDATE或DELETE语句时触发执行的PL / SQL代码。使用语句级触发器,程序员可以对用户发出的数据库指令进行控制,并执行代码。例如,您可以在发出UPDATE语句之前,使用语句级触发器检查新值,并确保它们与一致性要求相匹配。
例:
CREATE OR REPLACE TRIGGER trg_product_update
BEFORE UPDATE OR DELETE ON product
FOR EACH ROW
BEGIN
IF updating THEN
IF :new.price
RAISE_APPLICATION_ERROR(-20900,
‘Product Price cannot be lowered’);
END IF;
END IF;
END trg_product_update;
/
Oracle触发器的应用:
1、用于表的完整性检查;
2、可以用于记录表变更的历史记录,包括表的修改记录、删除记录以及新增记录;
3、可以借助触发器,在数据库表之间建立数据一致性。
总之,Oracle触发器是一种非常有用的功能,它可以帮助数据库管理员执行维护和管理功能,以确保数据库表中数据的完整性和一致性。