Oracle数据库学习笔记(二十六)–触发器的概念和分类
触发器的概念
触发器就是制定一个规则,当我们做增删改操作的时候,只要满足该规则,自动触发,无需调用。
触发器的分类
- 语句级触发器:不包含有 for each row 的触发器。
- 行级触发器:包含有 for each row 的就是行级触发器。
加 for each row 是为了使用 :old 或者 :new 的对象/一行记录。
在触发器中触发语句与伪记录变量的值
触发语句 | :old | :new |
---|---|---|
Insert | 所有字段都是空 ( null ) | 将要插入的数据 |
Update | 更新以前该行的值 | 更新后的值 |
Delete | 删除以前该行的值 | 所有字段都是空 ( null ) |
学习笔记
1、插入一条记录,输出一个新员工入职【语句级触发器】
create or replace trigger t1
after
insert
on person
declare
begin
dbms_output.put_line('一个新员工入职');
end;
触发t1
INSERT INTO person
VALUES (1, '小红');
COMMIT;
SELECT *
FROM person;
2、不能给员工降薪【行级别触发器】
create or replace trigger t2
before
update
on emp
for each row
declare
begin
if :old.sal>:new.sal then
raise_application_error(-20001, '不能给员工降薪');
end if;
end;
自定义异常:raise_application_error(-20001~-20999之间, ‘错误提示信息’);
触发t2
SELECT *
FROM emp
WHERE empno = 7788;
UPDATE emp
SET sal = sal - 1
WHERE empno = 7788;
COMMIT;