a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 71|回复: 1

[综合] Oracle辅导:Oracle触发器

[复制链接]
发表于 2012-8-4 13:54:49 | 显示全部楼层 |阅读模式
--创建触发器(行级触发器): a) R. a4 [3 C( ?
    create or replace trigger tri_update_emp_bak
3 p6 ^* z1 s1 ~/ m, U( T; u0 M" r    after update
" |' X  H3 s& z  [& l! i# [: s# L    on emp_bak
1 d0 I0 r1 b" \" f$ I% r    for each row  --每更新一行 就触发一次
# U* e8 D7 c  j( x    begin
; }1 V0 Q/ N" c- w1 d: S    --Oracle 里面 对触发器 也提供了特殊的对象 :NEW :OLD 来访问 更新前后的数据# B1 v5 V" v/ U6 U* y3 }
    dbms_output.put_line('更新后' || :NEW.sal);; ^* G* y) a$ F' P$ z+ o
    dbms_output.put_line('更新前' || :OLD.sal);; C/ t1 T0 {/ D" W. H6 n
    if updating then2 _! l9 _! m; ]; f
    end if;
9 u" q2 k' m" ?4 d! ?    if inserting
* x; W9 k1 e! w2 Y    end;) S- |2 h# [  [; B0 d0 D
    --创建触发器(行级触发器)(前置)
+ v$ b+ P, ^# m) H* m+ [9 R    create or replace trigger tri3_update_emp_bak8 \. r2 k# z# R
    before update
% v: p, L0 V; c+ y2 _3 b. R    on emp_bak0 y" L3 u, L% ~( C2 X! N
    for each row  --每更新一行 就触发一次: h. a* \- z2 |/ |* u2 j
    begin) A/ p0 s% k+ d$ Z
    --oracle 里面 对触发器 也提供了特殊的对象 :NEW :OLD 来访问 更新前后的数据
& l5 |2 Y' r8 `$ h* M$ u    dbms_output.put_line('更新后' || :NEW.sal);
7 a) u' F( E% A, {& s    dbms_output.put_line('更新前' || :OLD.sal);
- `+ U: M, t; J  }9 y$ X. t    end;- ?3 V5 r- ~! f1 M- [& d
    select * from emp_bak
6 i1 U2 P, P" N% m" G% \9 ?4 y) u    update emp_bak set sal = 1000 where empno in (7788)
/ h+ |$ F6 E4 {' n$ Q0 |. s    --创建触发器(表级触发器)6 ?. u1 O  v  d
    --//表级别触发器里面 不允许使用 :NEW :OLD 变量
$ ?3 T* C0 Z/ \$ B1 T    create or replace trigger tri2_update_emp_bak/ ]) D' y( {  Z* i$ {
    after update% ~4 E2 Q* Y: `( x! u. L! J0 f2 z
    on emp_bak7 {& C* }5 w7 F% x# Q) x& z
    begin
5 Q2 U. K. f( G2 L    -- dbms_output.put_line('更新后' || :NEW.sal);
* m1 F6 {/ `% q$ J    --dbms_output.put_line('更新前' || :OLD.sal);
( X$ s# ]; h# U3 u- H* L    end;
回复

使用道具 举报

 楼主| 发表于 2012-8-4 13:54:50 | 显示全部楼层

Oracle辅导:Oracle触发器

--创建触发器(行级触发器)6 W6 A3 J( H$ x" Z6 l
    create or replace trigger tri4_update_emp_bak" l* K# D) W* a9 w) f: B3 x
    after update of sal, V# D9 F% ]0 Q/ r$ x" ]- P8 J' y
    on emp_bak$ s$ D: C' W4 n; O+ i& Q
    for each row  --每更新一行 就触发一次8 X) D8 y- A! Q4 Z0 r
    begin, y9 P- g/ q9 U' |! ^" d' q
    --oracle 里面 对触发器 也提供了特殊的对象 :NEW :OLD 来访问 更新前后的数据
* }. Z! x2 h0 X- V  z    dbms_output.put_line('更新后' || :NEW.sal);
3 s5 r9 M0 K: T* F& [( h6 ?    dbms_output.put_line('更新前' || :OLD.sal);
" i( s: r2 ?2 Q    end;
( K+ D2 R, L- f0 A    create table userinfo. N. b4 w/ V3 O8 t5 \
    (
2 `. p; P/ o4 ~$ j" |4 L    userid number(4) PRimary key,
+ P/ n+ q2 ]+ j* P# W- P# t: _    username varchar2(20)
2 M- p1 _, k, `    )2 N8 ^0 S# \8 q* l: n5 n
    create table addrinfo
# V: z9 U8 _. G* c, a$ M& z    (( D+ \) N) |( w1 {
    addrid number(4) primary key,3 W7 X* Y  t& \, n! T3 ~
    addname varchar2(20),/ a) e; l% a) Q  ~$ @! S5 k
    userid number(4) references userinfo(userid)- d" C" s, H5 W8 A8 T' H
    )
; Q, L$ \3 C$ e% v8 j# g    insert into userinfo values (1,'李四')
& ]2 C; f8 X2 L( J8 i9 o: O5 s    insert into addrinfo values (1,'湖北武汉',1)
0 ?% a5 i0 J# h* g1 q' w1 B9 S    select * from addrinfo
8 D/ o; B9 l0 Z7 D$ v    delete from userinfo where userid =1+ c  i3 a+ G3 \; D
    --级联删除# b9 R! g* r, \* L  C
    create or replace trigger tri_userinfo_delete
% f) k/ b8 r% ^/ H- N    before  delete1 g: f7 G) p: r& F2 {8 L
    on userinfo
5 _0 F% ?: y) _2 h7 n- U+ K    for each row
7 N$ y1 x3 y2 `# p    begin# C/ ]; {( G% F; w
    delete from   addrinfo  where userid = :OLD.userid;6 E; J; I0 D3 ?3 m7 d
    -- insert into) o0 J/ `- y* q4 \5 Z
    end;
! E8 W1 k; `" f7 V: x2 t) N- R3 y) A    create table dept_bak as select * from dept
: K6 F* h' x" I0 L/ q! L$ [8 V    create or replace view  myview% f- _2 K  n; m' J5 r/ l; M6 K$ Y
    as9 g3 J% o1 X8 @4 z8 N
    select a.empno,a.ename,a.sal,b.dname% a  k) I, V! u4 y. X
    from emp a inner join dept b
$ w) M+ Z% A- C( l# e6 `- f. T    on a.deptno = b.deptno
5 n4 Y+ U& v8 W2 F7 c4 J+ w    select * from myview
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-18 00:50 , Processed in 0.348545 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表