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; 

 

posted @ 2021-02-17 20:59  路修索  阅读(28)  评论(0编辑  收藏  举报