实验六存储过程和触发器
- 格式:docx
- 大小:136.90 KB
- 文档页数:15
实验六存储过程和触发器
一、目的与要求
1. 掌握编写数据库存储过程的方法。
2. 掌握建立数据库触发器的方法,通过实验观察触发器的作用和触发条件设置 等相关操作。
二、实验准备
1. 了解编写存储过程和调用的T-SQL语法;
2. 了解触发器的作用;
3. 了解编写触发器的T-SQL语法。
三、实验内容
(一)存储过程
在studentdb数据库中建立存储过程getPractice,查询指定院系(名称)(作 为存储过程的输入参数)中参与“实践”课程学习的所有学生学号、姓名、所学 课程编号和课程名称,若院系不存在,返回提示信息。
提示:D」nfo表中存储了院系代码 D_ID,而St_lnfo表中学号字段St_ID 的前两位与之对应,则 D」nfo表与St_lnfo表之间的联系通过这两个字段的运 算构成连接条件。
1. 分别执行存储过程getPractice,查询“法学院”和“材料科学与工程学
院”的学生中参与“实践”课程的所有学生学号、姓名、所学课程编号和 课程名称
create procedure getPractice
@D_Name varchar(30)
output
as
begi n
if not exists
(select *
from D_I nfo
where D_Name= @D_Name
)
print'对不起,该院系不存在’
else
select st_in fo.St_ID,C」n fo.C_No,C_Name
from s_c_i nfo inner joi n st_i nfo on st_i nfo.St_ID=s_c_i nfo.st_id
inner joi n C_I nfo on s_c_i nfo.c_ no=C_I nfo.C_No
where st_in fo.St_ID in
(select St_ID
from st_i nfo join D_I nfo on D_In fo.D_ID =left(st_i nfo.St_ID,2)
where C」n fo.C_Type=' 实践'and D_ln fo.D_Name= @D_Name
) go
|D_常
prxta ■疋不.起,该箱>-f琴址*
al>d
9al«e? aT_iK.fd Sc^ID. C_Inf5 ■ ,. C^Nasic-
frcai. ■ c JJZ^O -~~-=r OJ_Z: ST LZL±= = sz 3 5~. I^-.s c ZXJED. - z j-J.
j.r-:er _ = IT. C_InfD M aF_e_infQBC_DO-C_1G£n C_Hc
wmtre 4c_inro.sc_iD
jpele = E TO
±zcx sjm jciri D■ 二上u 匚二 D o D_ID i 3Z _Z3Lt=-. =z_ZD^ 2 1
rfbUI IJlBdEa. C_TJ^PRE- ' 1 an± i&_lA£a.p)_JfadM" (C_lamE:
«nc£
print 'Xl'TiLH谪僥爲不存左"
selcn a^intc-St^ID G^IinTo ■ C_IPo.Clause
tTon 9 c info 1 -7 _'T at inf o ar into ■旨耳 11^9 ? Into,卸睪 Jt)
丄2_:e J. J Jlr. C IaXg g s c l^Tg . c oo^C IDJLD. □ KD
■rh« z e st._j_ZL.f 3 . St_12> —n
js-el—et St_£D
f EMi st_infe -D 1 -1 D_Inf o> cm D_InfQ. D_IB ■ r r T ■ j»e_infa. St_IBr 3 wn e re c_ in ire ・ G_Tsnw 宴践-■ r
u_ i ntc 匚 D_NWIC- t D_w«e
©口
=Xed ^etfxaetlC- * 学帕
g=*
J
二1站果 J AtJ D皿,对不起.谨院枭序存在,
s&Jec:!: ar.^inrc . Sr ID. C Tore C Eg C M址尼
ircm s 匚 JL二£□ 丄旦二亡二 二_i■二 st ■L二f■口 as s± zzs-fa.^" ■LAat u AEL£Q . st id
C_lnf& on a_c_infc. e_nci&C_lntciX_So
wbsic fg.
(Kiter s^.e
zrziL rt i^.fc _ j_r. □ Xaf?1 二口 D Izifc Z ZZ —Left st 1E£G St _ ID 2
wtie£e C_in« .C 巧!PL'实踐'二計戈 ii_inro. D_»Hm±- ftijkscM
end
g
s “心—IT科学宇目
□O
_______________________________________________________ SJ _________________________
L_ ____________________________
2.利用系统存储过程 sp_rename 将getPractice 更名为getPctStu
execute sp_re name getPractice , getPctStu
尹■ dbc/t_^infc JXXV417J9>tLJd«ntdb - SQLQutryl «qh 寺- ax-ac^t a vp gat Practice . 口
3•修改存储过程getPctStu,返回指定院系中参与实践课程的学生人次数, 并利用该存储过程以“法学院”为输入参数验证执行的结果
alter procedure getPctStu
@D_Name varchar(30)
as
begi n
if not exists
(select *
from D_I nfo
where D_Name= @D_Name print'对不起,该院系不存在’
else
select st_in fo.St_ID,C」n fo.C_No,C_Name,co unt (st_i nfo.St_ID) as
次数
from s_c_i nfo inner joi n st_i nfo on st_i nfo.St_ID=s_c_i nfo.st_id
inner joi n C_I nfo on s_c_i nfo.c_ no=C_I nfo.C_No
where st_in fo.St_ID in
(select St_ID
from st_i nfo join D_I nfo on D_In fo.D_ID =left(st_i nfo.St_ID,2)
where C」n fo.C_Type=' 实践'and D_ln fo.D_Name= @D_Name
)
group by st_i nfo.St_ID,C」n fo.C_No,C_Name
end
Go
exec getPctStu '法学院'
Go血十口辭皿啊砒-SQlQutryL科I" MV|
print '对不I九i枣FR系尸存守"
el«
select 3t_lntd. 5t_ID■ &_In£o-C_Haf C_N^me. .. ; t 3t_infO-St_lDi 璋E /•.制惜 f rw >_c_info n- - JD 1 rt_in£o cn
«t_i!nfci-3't_I&-isiB_in.£a ■|b_Ld
injier 3°in C_lnfQ OT ■.c.ipfg ・*.!^<.玉旳£.13口
■where st_in.Eci 5t_ID 1 n
aclest 5t_ln
EK= -cjkn D_ln£e g &_IK£Q ■ 1>_ID *W・
殆VK t'lsfc.t l¥Ft-J实霸■"二 D D WWK- St_y«ic
Ezu—P L-J! “七_丄1让
ttndl
3U
T-xec j-tBnt5tu '迭学【完・
G£>
□茁黑血:占豐
5l」D C-Nsw ' *
「企t i出:;血[5 72001 ] 如忖U (IB罷伸a i
3 2KHD5-:H0~ 57ZO13. 犬宇计刘曲気1
4.再修改存储过程getPctStu,返回指定院系中参与实践课程的学生人数 注:“人数”和“人次数”是不同的,对某一学生而言,如果参与了多门实 践课程,则“人次数”是指其参与的课程门数,而“人数”仍为 1。
J»C¥«17ISjtudcntdb SQLQucrylxql* 鹰芙
if flfit EM13t3
DC:丄橙Q匸•
*r=ni D_in*o
whEEei: ® D_" a« -D_narte
中*辭■对开記•你黑査询的碍饕孑存存!,
el.ae
s-alect- _:2 -xiiL 三匸_liL.fc 3L_I3 aj 人戎哲7
from s_e_ info inziez jckLn 3t_ln£o on s-_lnfc. 3t_II>-3_e_liirD.^L—tjd
inner _ -:] C_In.fa on 5_E_in.fo. r_nai-C_Tri£c . C^o
where st infs.3t ID ;n
(B&lcct 5t ID
frem st info jo 1 D^Xnto ou H^Xnfb・l> TD -"-r (fft infe. 5S_ID(I2I where C_lBfQ ・ C.TTOL ! 1 ■八 D^Tnfo, D_19I9K -
範.Efmc
>
_J祖I
■討舟已b.派注■:
(二)触发器
1.在studentdb数据库中建立一个具有审计功能的触发器:
触发器名为tr_sc,功能要求:审计在s_c_info表中对score字段的更新和