Oracle怎么写触发器
时间: 2023-11-11 15:25:17 浏览: 89
在 Oracle 数据库中,触发器的语法格式为:
```
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
[FOR EACH ROW]
[ENABLE/DISABLE]
[WHEN condition]
DECLARE
-- 触发器操作,可以使用 PL/SQL 语言编写
BEGIN
-- 触发器操作,可以使用 PL/SQL 语言编写
END;
```
其中,`OR REPLACE` 关键字表示如果同名的触发器已经存在,则替换它;`BEFORE` 或 `AFTER` 关键字用于指定触发器是在执行 DML 操作前还是后触发;`INSERT`、`UPDATE` 或 `DELETE` 关键字用于指定触发器是在哪种 DML 操作时触发;`table_name` 是要对其触发器进行定义的表名;`FOR EACH ROW` 关键字表示这是一个行级触发器,每次 DML 操作都会对每一行数据都触发一次;`ENABLE/DISABLE` 关键字表示触发器是否启用;`WHEN condition` 关键字表示触发器执行的条件,可选项。
以下是一个简单的 Oracle 触发器示例,当在 `employees` 表中插入一条记录时,会自动向 `logs` 表中插入一条日志记录:
```
CREATE OR REPLACE TRIGGER insert_employee_log
AFTER INSERT ON employees
FOR EACH ROW
DECLARE
emp_name employees.name%TYPE;
BEGIN
emp_name := :new.name;
INSERT INTO logs (log_time, log_message) VALUES (SYSDATE, 'A new employee was inserted. Name: ' || emp_name);
END;
```
在这个例子中,触发器的名称是 `insert_employee_log`,触发时间是 `AFTER INSERT`,操作的表名是 `employees`,触发器主体使用 `INSERT INTO` 语句向 `logs` 表中插入了一条日志记录。`:new` 是一个特殊的关键字,用于获取插入操作中的新数据行。`SYSDATE` 是一个系统函数,用于获取当前日期和时间。
阅读全文