oracle 学习笔记
目录
1.触发器定义
触发器是当特定事件出现时自动执行的存储过程 特定事件可以是执行更新的DML语句和DDL语句 触发器不能被显式调用
2.触发器功能
- 自动生成数据
- 自定义复杂的安全权限
- 提供审计和日志记录
- 启用复杂的业务逻辑
3.触发器的组成部分
触发器语句(事件)
定义激活触发器的 DML 事件和 DDL 事件
触发器限制
执行触发器的条件,该条件必须为真才能激活触发器
触发器操作(主体)
包含一些 SQL 语句和代码,它们在发出了触发器语句且触发限制的值为真时运行
4.创建触发器语法
4.1触发器语法
create [or replace] trigger trigger_name
before | after | instead of –触发时间
insert[or] | update[or] | delete –触发事件
[of col_name] –指定将被更新的列名
on table_name –指定触发器相关联的表或视图
[for each row] –触发类型
[when(condition)]–触发条件
pl/sql_block;
4.2创建触发器
创建触发器
create or replace trigger tri_1
after
insert
on emp
begin
dbms_output.put_line('添加成功');
end;
测试
insert into emp values(7772,'sun','clerk',8888,sysdate,800,10,20);
5.触发器类型
5.1触发器类型有:
1.模式(DDL)触发器:在模式中执行DDL语句时执行
2.数据库级触发器:在发生打开、关闭、登录和退出数据库等系统事件时执行
3.DML触发器:在对表或视图执行DML语句时执行
行级触发器:无论受影响的行数是多少,都只执行一次
语句级触发器:对DML语句修改的每个行执行一次
视图触发器:用于用户不能直接使用 DML 语句修改的视图
5.2行级触发器
create table test_trg
(id number, name varchar2(20));
create sequence seq_test;
create or replace trigger bi_test_trg
before insert or update of id
on test_trg
for each row
begin
if inserting then
select seq_test.nextval into :new.id from dual;
else
raise_application_error(-20020, '不允许更新id值!');
end if;
end;
5.3语句级触发器
create or replace trigger trgdemo
after insert or update or delete
on order_master
begin
if updating then
dbms_output.put_line(‘已更新 order_master 中的数据');
elsif deleting then
dbms_output.put_line(‘已删除 order_master 中的数据');
elsif inserting then
dbms_output.put_line(‘已在 order_master 中插入数据');
end if;
end;
5.4视图级触发器(instead of)
create or replace trigger upd_ord_view
instead of update
on ord_view
for each row
begin
update order_master set vencode=:new.vencode
where orderno = :new.orderno;
dbms_output.put_line(‘已激活触发器');
end;
6.启动、禁用、删除触发器
alter trigger trigger_name disable;--禁用触发器
alter trigger trigger_name enable;--启动触发器
--删除触发器
drop trigger trigger_name;