oracle触发器
oracle触发器
简介
触发器是存储的程序,在发生某些事件时会自动执行或触发。 一般情况发生下面列表的情况而执行
- DML(增删改)
- DDL
- DB OP,logon logoff,startup ,shutdown
触发器的好处
- 自动完成某些工作
- 安全
- 防止一些无效操作
- etc
创建触发器
CREATE [OR REPLACE ] TRIGGER trigger_name
{BEFORE | AFTER | INSTEAD OF }
{INSERT [OR] | UPDATE [OR] | DELETE}
[OF col_name]
ON table_name
[REFERENCING OLD AS o NEW AS n]
[FOR EACH ROW]
WHEN (condition)
DECLARE
Declaration-statements
BEGIN
Executable-statements
EXCEPTION
Exception-handling-statements
END;
- CREATE [OR REPLACE] TRIGGER TRIGGER_NAME -创建或与替换现有触发TRIGGER_NAME。
- {BEFORE | 之后| INSTEAD OF} - 指定何时执行触发器。INSTEAD OF子句用于在视图上创建触发器。
- {INSERT [OR] | 更新[或] | DELETE} - 这指定了DML操作。
- [OF col_name] - 指定要更新的列名。
- [ON table_name] - 指定与触发器关联的表的名称。
- [引用旧的as n n] - 这允许您为各种DML语句引用新值和旧值,例如INSERT,UPDATE和DELETE。
- [FOR EACH ROW] - 指定行级触发器,即将对受影响的每一行执行触发器。否则,触发器将在执行SQL语句时执行一次,这称为表级触发器。
- WHEN(条件) - 这为触发器将触发的行提供条件。该子句仅对行级触发器有效。
eg
create or replace trigger show_changes
before delete or insert or update on emps
for each row
when(NEW.empno > 0)
declare
sal_diff number;
begin
sal_diff := :NEW.sal - :OLD.sal;
dbms_output.put_line('old sal:' || :OLD.sal);
dbms_output.put_line('new sal:' || :NEW.sal);
dbms_output.put_line('diff sal:' || sal_diff);
end;
效果如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现