--创建触发器(行级触发器)
/ q& L& E' f+ y create or replace trigger tri_update_emp_bak' |+ A6 _$ g- V/ Y- B; a, Y+ p
after update
[3 t! } B, Y& K" p, o* H$ j on emp_bak
# L" b8 Y9 i. I, V5 R% v for each row --每更新一行 就触发一次( [" x& t& U0 p* s$ p
begin ?+ \0 j. Q, c) \( {7 u
--Oracle 里面 对触发器 也提供了特殊的对象 :NEW :OLD 来访问 更新前后的数据* x) R5 D9 d3 h6 w ^( d
dbms_output.put_line('更新后' || :NEW.sal);! m5 k7 \5 W6 T! c: j0 A0 E' R8 M
dbms_output.put_line('更新前' || :OLD.sal);' R7 { U& \) P
if updating then
! w2 E/ D4 V, ]0 G L( `- z end if;$ G( T$ F9 G$ F/ a
if inserting
G3 g4 [1 ~: n5 K. X3 G end;5 A% e( Y. L: Y: y
--创建触发器(行级触发器)(前置)
3 V, E1 [% D7 Z$ c" F create or replace trigger tri3_update_emp_bak+ M" b& c; c8 t4 ?& M2 E! G
before update9 y' c% a, e, [- L! g2 g% C
on emp_bak
5 o5 t2 d. f. F: `+ k for each row --每更新一行 就触发一次
( m6 {- N: d% R- F begin
; O3 a1 w, e8 D) F O --oracle 里面 对触发器 也提供了特殊的对象 :NEW :OLD 来访问 更新前后的数据
6 p& N. @* u9 F# l8 ]: e dbms_output.put_line('更新后' || :NEW.sal);2 W4 `, g; w% D+ U
dbms_output.put_line('更新前' || :OLD.sal);4 r) R" ^, P# _1 M
end;% s( n/ K9 `) [' c, R
select * from emp_bak
# h' g' M- e& }/ n7 ?; r; O update emp_bak set sal = 1000 where empno in (7788)- x6 K9 k3 s! r+ y, m3 D* r1 h
--创建触发器(表级触发器)
2 Y. Q; Q9 c# l3 K4 @$ r7 i: d --//表级别触发器里面 不允许使用 :NEW :OLD 变量
6 U! P) j F) ?: V" a; [1 O create or replace trigger tri2_update_emp_bak
) c5 T; S/ L5 M7 y+ {7 M6 y c after update. N& K1 g! N/ P' E% O1 p) Z
on emp_bak
( V- i8 N) g5 Y- B- A( b begin
4 }$ [$ X7 z& X$ Z5 `: U -- dbms_output.put_line('更新后' || :NEW.sal);0 f1 {/ X3 p$ c9 j7 [
--dbms_output.put_line('更新前' || :OLD.sal);& _' `2 z7 G* }& d" J
end;0 f$ ` R: B& R" y) g# r3 I
--创建触发器(行级触发器) h P% a l- `4 r+ u" o# h+ a
create or replace trigger tri4_update_emp_bak, d( z. t9 E, ~
after update of sal5 L2 R4 a2 S8 M2 S8 C6 t
on emp_bak5 W" ]* `4 I) M0 ^. y# j% N- [5 [
for each row --每更新一行 就触发一次
1 v# X, j+ s* [# N' v begin. r; e2 X6 s8 T2 q9 @
--oracle 里面 对触发器 也提供了特殊的对象 :NEW :OLD 来访问 更新前后的数据
4 g/ u F2 G& u5 q$ e7 }3 U dbms_output.put_line('更新后' || :NEW.sal);
& S9 M4 d+ V4 O6 Z+ r1 {9 }) u dbms_output.put_line('更新前' || :OLD.sal);
1 d+ W; x/ F: C i: J end;
, e5 y& f' H; \1 ^# S create table userinfo
C$ j, E+ t, } (
0 w! q4 X8 Y/ Z; G/ ?+ g userid number(4) PRimary key,
$ a9 F6 d( A8 B. R& o username varchar2(20)" P: M8 b* {- }
)
/ u+ ]. h' d5 d+ T( g8 L create table addrinfo) Y ]& [2 i* o, U: w- W* `
(
* N* `" n9 F6 K/ ^- ~% o( B addrid number(4) primary key,4 V w" @( G, K" t! a6 H
addname varchar2(20),4 t0 ~2 I6 d- z! K5 m# f( ^
userid number(4) references userinfo(userid)5 R' P3 ~3 A9 z. G: e* A$ ~1 @
)
- b1 [+ L6 [: ^6 w3 E# v7 D insert into userinfo values (1,'李四')
8 u0 Z5 S- E8 r) B3 E- _) T insert into addrinfo values (1,'湖北武汉',1). s8 y% v$ P3 s5 k
select * from addrinfo
8 _ u* T3 O$ c; S/ U delete from userinfo where userid =1
6 j4 z& \! I4 }7 { --级联删除
3 l1 A0 k) h; M* y- w create or replace trigger tri_userinfo_delete5 n4 K5 b: h! q, C/ f. J
before delete
) W# E# X1 D l2 ]; u2 b on userinfo
, Q. L J3 k" U3 e4 k6 [ ` for each row
# c5 }9 f9 a, G; D begin
2 m1 \. z/ |; P! \5 U delete from addrinfo where userid = :OLD.userid;
% j8 [) E8 M: h$ a4 t. d( C -- insert into
5 R/ H$ x! h, \; L/ ~9 Z( W end;
) g! \; v* l* b* P$ s( M create table dept_bak as select * from dept
. G6 }( p) N x1 r. X5 B2 m8 k create or replace view myview
: ]# R/ R( R0 X g as
; L& c( G# \4 a2 ~4 @ select a.empno,a.ename,a.sal,b.dname- M3 D6 T; v: ` y b2 N/ X- h8 ?
from emp a inner join dept b
; C# F; q2 K% o) Q& \0 w9 d; F on a.deptno = b.deptno9 ^1 X1 i' L ~
select * from myview |