深入了解Oracle中多种触发器类型(oracle触发器类型)
Oracle数据库中定义触发器的方式比起其他关系型数据库要灵活的多。Oracle的触发器可以根据语句、时间和事件等多种条件被触发,而且也包括了SQL语言、PL/SQL块以及调用外部程序来实现功能。
Oracle数据库中触发器分为三类:表级触发器、行级触发器和前置触发器。
表级触发器是在表上定义的触发器,触发条件可以是DELETE、INSERT或UPDATE的DML操作,而且也可以是某表的DDL操作,并且每当该条件被满足时,触发器所设置的动作都会被执行。例如:
create or replace trigger balance_check
before insert on bank_table
for each row
begin
if :new.account_balance
Raise_application_error(-20100,’账户余额不足’);
END IF;
end balance_check;
表触发器检查在插入bank_table表之前,新插入的行account_balance字段是否小于0,若是,则报错‘账户余额不足’。
行级触发器与表级触发器类似,也可以对某表进行DELETE、INSERT或UPDATE操作,但不会处理表及表中内容API操作造成的改变。它只处理具体操作行,而不是操作表,它是在每一行发生改变之前、之后执行被触发器定义的操作。例如:
create or replace trigger salary_check
after insert or update on employee
for each row
begin
if :new.salary
Raise_application_error(-20101,’工资不能为负值’);
END IF;
end salary_check;
行级触发器检查插入employee表或更新表中数据的salary字段是否小于0,若是,则报错‘工资不能为负值’。
前置触发器可以在一个用户进行DML操作之前处理一段PL/SQL语句,它可以检查用户输入的数据,如果不符合特定的格式,则报出错误并中断操作,这样可以保证数据的准确性。例如:
create or replace trigger salary_check
before update or insert on employee
for each row
begin
if :new.salary
Raise_application_error(-20102,’工资不能小于0′);
END IF;
end salary_check;
前置触发器检查更新employee表或插入表中数据的salary字段是否小于0,若是,则报错‘工资不能小于0’。
因此,Oracle数据库提供了三种不同类型的触发器以及多种条件触发器,从而使数据库应用更加灵活,使数据更加安全可靠。