oracle触发器
时间: 2023-06-29 12:06:05 浏览: 107
Oracle触发器是一种特殊的数据库对象,它会在指定的数据表上执行特定的操作,如插入、更新或删除数据时触发。触发器可以用来实现各种数据库约束和业务逻辑,比如检查数据完整性、自动计算数据等。
Oracle触发器分为行级触发器和语句级触发器。行级触发器会在每一行数据发生变化时触发,而语句级触发器则会在整个SQL语句执行完毕后触发。
创建Oracle触发器的语法如下:
```
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
[FOR EACH ROW]
[WHEN condition]
DECLARE
-- 声明变量和常量
BEGIN
-- 触发器的操作,可以是PL/SQL代码或SQL语句
END;
```
其中,`trigger_name`是触发器的名称,`INSERT`、`UPDATE`和`DELETE`是触发器要监听的事件,`table_name`是要监听的表名,`condition`是触发条件,`DECLARE`和`BEGIN`之间是触发器的操作,可以是PL/SQL代码或SQL语句。
例如,下面是一个在`orders`表上创建的行级触发器,它会在每次插入新数据时自动计算订单总额并更新到`orders`表的`total_amount`字段中:
```
CREATE OR REPLACE TRIGGER calc_total_amount
BEFORE INSERT ON orders
FOR EACH ROW
BEGIN
:NEW.total_amount := :NEW.price * :NEW.quantity;
END;
```
在这个触发器中,`BEFORE INSERT`表示在插入数据之前触发,`FOR EACH ROW`表示是行级触发器,`:NEW`是一个系统变量,表示新插入的行数据,`:=`表示赋值操作。因此,触发器的作用是将`price`和`quantity`相乘并赋值给`total_amount`字段。
阅读全文