实验六存储过程和触发器

  • 格式: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字段的更新和