日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

《数据库原理与应用》(第三版)第11章 存储过程和触发器 基础 习题参考答案

發布時間:2024/5/7 数据库 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《数据库原理与应用》(第三版)第11章 存储过程和触发器 基础 习题参考答案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

習題
1.存儲過程的作用是什么?為什么利用存儲過程可以提高數據的操作效率?
答:(1)允許模塊化程序設計
(2)改善性能
(3)減少網絡流量
(4)可作為安全機制使用
因為系統對存儲過程是預編譯的。

2.在定義存儲過程的語句中是否可以包含數據的增、刪、改語句?
答:可以。

3.用戶和存儲過程之間如何傳遞數據?
答:可通過輸入、輸出參數。或者

4.存儲過程的參數有幾種形式?
答:有輸入和輸出兩種。

5.觸發器的作用是什么? 前觸發和后觸發的主要區別是什么?
答:實現復雜的處理邏輯和商業規則,增強了數據完整性約束的功能。
前觸發器是在引發觸發器執行的操作之前先執行觸發器;后觸發器是在引發觸發器執行的操作執行完后再執行觸發器。

6.插入操作產生的臨時工作表叫什么?它存放的是什么數據?
答:inserted,存放新插入的數據。

7.刪除操作產生的臨時工作表叫什么?它存放的是什么數據?
答:deleted,存放被刪除的數據。

8.更改操作產生的兩個臨時工作表叫什么?其結構分別是什么,它們分別存放的是什么數據?
答:inserted和deleted,結構同定義觸發器的表,分別存放更新前和更新后的數據。

上機練習
1.利用第11章建立的students數據庫以及Student、Coures、SC表,創建滿足下述要求的存儲過程,并查看存儲過程的執行結果。
(1)查詢每個學生的修課總學分,要求列出學生學號及總學分。
create proc p1
as
select sno,SUM(credit) as 總學分
from SC
group by sno

(2)查詢學生的學號、姓名、修的課程號、課程名、課程學分,將學生所在的系作為輸入參數,執行此存儲過程,并分別指定一些不同的輸入參數值。
create proc p2
@dept varchar(20) = ‘計算機系’
as
select s.sno,sname,c.cno,cname,credit
from Student s join SC on s.Sno=SC.Sno
join Course c on c.Cno=SC.Cno
where Sdept = @dept
執行示例1:EXEC P2
執行示例2:EXEC P2 ‘通信工程系’

(3)查詢指定系的男生人數,其中系為輸入參數,人數用輸出參數返回。
create proc p3
@dept varchar(20),@rs int output
as
select @rs = COUNT(*) from Student
where Sdept = @dept and Ssex = ‘男’

(4)查詢考試平均成績超過指定分值的學生學號和平均成績。
create proc p4
@x int
as
select sno,avg(grade) from sc
group by sno
having avg(grade) > @x

(5)查詢查詢指定系的學生中,選課門數最多的學生的選課門數和平均成績,要求系為輸入參數,選課門數和平均成績用輸出參數返回。
create proc p5
@dept varchar(30),@cnt int output,@avg int output
as
select top 1 @cnt = count() ,@avg = avg(grade)
from sc join student s on s.sno = sc.sno
where sdept = @dept
group by s.sno
order by count() desc

(6)刪除指定學生的指定課程的修課記錄,其中學號和課程號為輸入參數。
create proc p6
@sno char(7),@cno char(10)
as
delete from SC where Sno = @sno and cno = @cno

(7)修改指定課程的開課學期。輸入參數為:課程號和修改后的開課學期,開課學期的默認值為2。如果指定的開課學期不在1~8范圍內,則不進行修改。
create proc p7
@cno char(10) , @new_semester int = 2
as
if @new_semester between 1 and 8
update course set semester = @new_semester
where cno = @cno
3.修改第1題(1)的存儲過程,使之能夠查詢指定系中,每個學生選課總門數、總學分和考試平均成績。
alter proc p1
@dept varchar(30)
as
select s.sno,count(*) 選課總門數,SUM(credit) as 總學分,
Avg(grade) 考試平均成績
from SC join student s on s.sno = SC.sno
group by s.sno

4.利用第11章建立的students數據庫以及Student、Coures、SC表,創建滿足如下要求的觸發器,并檢測觸發器的功效。
(1)限制考試成績必須在0~100范圍內。
create trigger tri1 on sc after insert,update
as
if exists(select * from inserted
where grade not between 0 and 100)
rollback

(2)限制學生所在系的取值必須在{計算機系,信息系,物理系,數學系}范圍內。
create trigger tri2 on student after insert,update
as
if exists(select * from student where sdept not in
(‘計算機系’,‘信息系’,‘物理系’,‘數學系’))
Rollback
(3)限制學生的選課總門數不能超過8門。
create trigger tri4 on sc after insert
as
if exists(select * from sc
where sno in (select sno from inserted)
group by sno
having count(*) > 8 )
rollback
(4)限制不能刪除考試成績不及格學生的考試記錄。
create trigger tri4 on sc after delete
as
if exists(select * from deleted where grade < 60 )
rollback
5.利用11.3節創建的工作表和職工表,定義滿足如下要求的觸發器,并檢測觸發器的功效。
(1)限制職工的基本工資和浮動工資之和必須大于等于2000。
create trigger tri4 on 職工表 after insert,update
as
if exists(select * from inserted where (基本工資 + 浮動工資 ) <2000 )
Rollback

(2)限制工作表中最高工資不能低于最低工資的1.5倍。
create trigger tri5 on 工作表 after insert,update
as
if exists(select * from inserted where 最高工資 < 最低工資*1.5 )
Rollback

(3)限制不能刪除基本工資低于1500的職工。
create trigger tri6 on 職工表 after delete
as
if exists(select * from deleted where 基本工資 < 1500 )
Rollback

總結

以上是生活随笔為你收集整理的《数据库原理与应用》(第三版)第11章 存储过程和触发器 基础 习题参考答案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。