什么是Oracle触发器
Oracle触发器是一段规定好了触发条件的SQL语句集合,当满足该条件时,该SQL语句集合便会自动执行。触发器是Oracle数据库中一个非常重要的术语,它能够实现自动化的数据库操作以及业务逻辑,在数据库的设计和实现中扮演着不可或缺的角色。
通过创建触发器,我们可以实现在特定情况下,对数据表进行自动更新、插入或删除操作。
Oracle触发器的分类
1. DML触发器
DML(Data Manipulation Language)触发器是监视表中数据变化的触发器,当执行insert、update、delete语句时,会触发该类型的触发器。对于DML触发器,我们可以定义在表级别操作之前或之后。
2. DDL触发器
DDL(Data Definition Language)触发器是监视数据定义变更的触发器,当执行create、alter、drop语句时,会触发该类型的触发器。
3. 系统事件触发器
系统事件触发器是观察数据库管理操作(如STARTUP、SHUTDOWN)的触发器。当数据库启动或关闭时,会触发该类型的触发器。
Oracle触发器的语法
Oracle触发器的语法格式如下:
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
[REFERENCING OLD AS old NEW AS new]
[FOR EACH ROW]
WHEN (condition)
DECLARE
variable_declaration;
BEGIN
-- 触发的操作语句
END;
其中:
CREATE [OR REPLACE] TRIGGER:创建触发器并指定触发器名称。
{BEFORE | AFTER}:定义触发器在SQL语句之前还是之后执行。
{INSERT | UPDATE | DELETE}:定义触发器所触发的事件类型。
ON table_name:定义对哪个表操作触发器。
[REFERENCING OLD AS old NEW AS new]:为变量名指定别名(可选项)。
[FOR EACH ROW]:定义触发器应用于每一行还是每个语句(可选项)。
{WHEN (condition):定义触发器触发的条件(可选项)。
variable_declaration;:声明变量(可选项)。
BEGIN...END;:触发器的主体部分,包含针对触发事件的操作。
Oracle触发器的示例
以下是一个触发器示例,其中的触发器可在每次插入数据记录时,自动进行计算并修改原始记录:
CREATE OR REPLACE TRIGGER modify_temperature
BEFORE INSERT ON sensor_info
FOR EACH ROW
DECLARE
temperature NUMBER(10,2);
BEGIN
temperature:=(:NEW.temperature)*0.6;
:NEW.temperature:=temperature;
END;
以上示例中,trigger_name为modify_temperature,将在插入sensor_info表中的新行之前自动运行;对于每一行,它将把temperature值读取进来并修改为其0.6倍(例如,从摄氏度到华氏度的转换)。