--创建触发器(行级触发器)# m0 @2 Q O) i) f O( F
create or replace trigger tri_update_emp_bak: j# D* g5 n4 |% t. g# F* v O
after update
" h: @3 _1 w( C on emp_bak; M0 P3 D6 M0 w( H2 T
for each row --每更新一行 就触发一次
# E* J# t! v5 @2 M2 j8 E1 ?# b begin
( d; G9 u3 M& e' v. w9 o --Oracle 里面 对触发器 也提供了特殊的对象 :NEW :OLD 来访问 更新前后的数据
3 E# E% r+ Y/ b, q, l dbms_output.put_line('更新后' || :NEW.sal);
2 y. v. N( h# e* F/ h: J5 Q4 ` dbms_output.put_line('更新前' || :OLD.sal);) b9 |1 T! o9 N
if updating then
5 Y$ }4 g8 `' F! E- g+ }6 [7 M6 Q end if;
6 ]" V" x j0 l- M' M if inserting! U( A& d4 @6 t6 m' d% N' P, h
end;# U8 d$ w x% C
--创建触发器(行级触发器)(前置)" r6 O& c+ h) P4 s
create or replace trigger tri3_update_emp_bak# V' m$ e+ O; b4 @" X/ ]; ?
before update
* p7 n& {% M5 X% v! n- E. |$ ^ on emp_bak
0 x! z: ~$ m7 h" w& V: r for each row --每更新一行 就触发一次
7 t% K* K2 s \3 C- o$ f begin
$ y) P' P8 L5 _, ^ --oracle 里面 对触发器 也提供了特殊的对象 :NEW :OLD 来访问 更新前后的数据" I9 N9 C2 H/ n; ]6 o4 a. ]9 K
dbms_output.put_line('更新后' || :NEW.sal);
/ l: W3 v9 m2 J6 a; k dbms_output.put_line('更新前' || :OLD.sal);
; P7 S3 Y0 c; c end;
6 d5 w; ~& M" D9 v8 N select * from emp_bak
! S$ |! R9 F2 c h2 Q: g update emp_bak set sal = 1000 where empno in (7788)+ u4 O. F1 V6 p* D: K! \+ n7 a" x% ]
--创建触发器(表级触发器)7 D8 C0 N" T3 k# g) U
--//表级别触发器里面 不允许使用 :NEW :OLD 变量+ X) K" V. {5 q& y7 k, X8 }+ M- W
create or replace trigger tri2_update_emp_bak4 A) o. r, D% k" u5 b/ a
after update( |* d6 n, {: I/ E+ I
on emp_bak
0 C+ y( T* j" v2 X) n: @ | begin
" [5 y9 w3 {3 p/ {% v -- dbms_output.put_line('更新后' || :NEW.sal);, X6 P% ?% y0 F+ ~2 a
--dbms_output.put_line('更新前' || :OLD.sal);
9 w: v7 m, L: P) U7 \1 e end;
& I! t: `) N! [. m --创建触发器(行级触发器)
8 n* q0 s* S+ L create or replace trigger tri4_update_emp_bak! G" H' Q; |$ F* b' `: s5 l( E
after update of sal
- @, w; E. t' L! f. b$ W on emp_bak
) f& e, G/ [6 }, N3 R7 q for each row --每更新一行 就触发一次% K" b7 O, H, k& l D
begin$ `/ V6 z2 K! @/ b$ s$ O
--oracle 里面 对触发器 也提供了特殊的对象 :NEW :OLD 来访问 更新前后的数据7 M2 o j0 H! O/ |* C
dbms_output.put_line('更新后' || :NEW.sal);, @# n' }% {! M g6 C) s4 S" Y
dbms_output.put_line('更新前' || :OLD.sal);, {( L" f, d! F- o! U* f7 m
end; T8 ?, d, q$ u( b/ t5 X
create table userinfo
% n0 I9 F, |7 J! Q8 e ( x9 C! z4 [9 E8 J( r/ X- V
userid number(4) PRimary key,0 k$ }- W! E8 b0 n6 }( _+ t! \
username varchar2(20)* }* N: T7 W0 U/ _. _3 f2 P
)
, W& ^" q& X4 L1 Q: \: v q- c create table addrinfo
1 H- P2 a$ N# `! s (
* G. a; o+ i+ A% I; ? addrid number(4) primary key,8 P: v8 A7 h$ g/ r
addname varchar2(20), R3 R6 C9 j( X
userid number(4) references userinfo(userid)# S# |; n. K/ w$ y6 U, U5 l, G
)( q8 K% W% g- Z3 W9 T% f$ ~) W
insert into userinfo values (1,'李四')
6 S6 h1 B2 j+ G insert into addrinfo values (1,'湖北武汉',1)
4 [! @2 T4 S7 h; s2 k select * from addrinfo/ M4 k, j9 P5 }
delete from userinfo where userid =1
) P( P( I) l- L) z --级联删除
( q0 ]6 S1 n2 v* J+ R create or replace trigger tri_userinfo_delete9 j! {% B# v* l: ?+ z$ W) `
before delete
2 ~5 J7 e5 ?# X7 D) s- p0 x% n- ?1 @4 O on userinfo# o/ M2 ~" _; ]
for each row& S+ I% P0 I4 C1 B- g2 N
begin
6 B! B6 t# k J L" j" G delete from addrinfo where userid = :OLD.userid;, f/ G9 t( K h' ~0 \) Y" S9 J5 F+ _
-- insert into4 I W3 P. u' t1 T( u) s9 n' z
end;
0 I6 j) Z. a0 k8 R+ J! o create table dept_bak as select * from dept
' v. N9 f, b( I) ~4 }2 m- v) T create or replace view myview# y: ?$ E" o* A
as
5 s1 l- l4 q0 t: o" j8 a j select a.empno,a.ename,a.sal,b.dname7 N/ a' \ z# p+ H4 h7 @
from emp a inner join dept b) z% g# u$ w0 C6 q E6 F
on a.deptno = b.deptno
' N. m) w2 b7 C9 M& x1 k select * from myview |