06_触发器
1 ***********************
2 触发器
3 ***********************
4 --一个helloworld级别的触发器
5 create or replace trigger hello_trigger
6 after
7 update on employees
8 --for each row
9 begin
10 dbms_output.put_line('hello...');
11 --dbms_output.put_line('old.salary:'|| :OLD.salary||',new.salary'||:NEW.salary);
12 end;
13 然后执行:update employees set salary = salary + 1000;
14
15 --28. 触发器的 helloworld: 编写一个触发器, 在向 emp 表中插入记录时, 打印 'helloworld'
16
17 create or replace trigger emp_trigger
18 after
19 insert on emp
20 for each row
21 begin
22 dbms_output.put_line('helloworld');
23 end;
24
25 --29. 行级触发器: 每更新 employees 表中的一条记录, 都会导致触发器执行
26
27 create or replace trigger employees_trigger
28 after
29 update on employees
30 for each row
31 begin
32 dbms_output.put_line('修改了一条记录!');
33 end;
34
35 --语句级触发器: 一个 update/delete/insert 语句只使触发器执行一次
36
37 create or replace trigger employees_trigger
38 after
39 update on employees
40 begin
41 dbms_output.put_line('修改了一条记录!');
42 end;
43
44 --30. 使用 :new, :old 修饰符
45
46 create or replace trigger employees_trigger
47 after
48 update on employees
49 for each row
50 begin
51 dbms_output.put_line('old salary: ' || :old.salary || ', new salary: ' || :new.salary);
52 end;
53
54 --31. 编写一个触发器, 在对 my_emp 记录进行删除的时候, 在 my_emp_bak 表中备份对应的记录
55
56 1). 准备工作:
57 create table my_emp as select employee_id id, last_name name, salary sal from employees
58 create table my_emp_bak as select employee_id id, last_name name, salary sal from employees where 1 = 2
59
60 2).
61 create or replace trigger bak_emp_trigger
62 before delete on my_emp
63 for each row
64
65 begin
66 insert into my_emp_bak values(:old.id, :old.name, :old.sal);
67 end;