当定义的 '触发条件' 成立时,其语句就会 '自动执行' ,触发条件可以是对表数据的新增修改或者删除等。触发器的作用保护数据的安全,监视对数据的各种操作,如 '日志记录': 对重要表的 '修改' 进行记录。
主要区别:'调用运行方式不同'
存储过程: '用户'、'应用程序'、'触发器' 来调用 触发器: '自动执行'(满足 '触发条件'),与其它无关
格式:
create [or replace] trigger 触发器名
触发时间 {before | after} -- view 中是 instead of
触发事件 {insert | update | delete} -- dml、ddl、database
on 触发对象 -- table、view、schema、database
触发频率 {for each row} -- 行级触发器。默认:语句级触发器
[follows 其它触发器名] -- 多个触发器执行的 前后顺序
[when 触发条件]
begin
pl/sql 语句;
end;
💡说明: 触发器名:一般格式 tr_* 触发时间:在 '触发事件' 发生之前(before)还是之后(after) 触发事件:根据不同的 '触发事件',可以分为不同的 '类型' 触发对象:table、view、schema、database 触发频率:'语句级触发器'(默认)指触发一次,'行级触发器' 每一行触发一次 触发条件:仅当 '触发条件' 为 True 时,才执行 pl/sql 语句
create or replace trigger tr_user_info
after update of sno, name on user_info
for each row
begin
if :new.id <> :old.id or :new.username <> :old.usernamethen
raise_application_error(-20001,
'禁止修改系统用户! id = ' || :new.id || ', username = ' ||
:new.username);
end if;
end;