《数据库实验报告 数据库程序设计.doc》由会员分享,可在线阅读,更多相关《数据库实验报告 数据库程序设计.doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、一、 题目 数据库程序设计:存储过程设计及游标等高级技术二、 调试运行结果截图 1、存储过程的设计 (1)定义存储过程 CREATE PROC GET_GRADE_1111 (S# CHAR(10) AS SELECT CNAME,GRADE FROM S,SC,C WHERE S.S#=SC.S# AND SC.C#=C.C# AND SC.S#=S# (2)有输入、输出存储过程的定义 CREATE PROC GET_MAX_AVG SS# CHAR(20),A FLOAT OUTPUT,B FLOAT OUTPUT AS SELECT A=AVG(GRADE),B=MAX(GRADE) F
2、ROM SC WHERE S#=SS# (3)调用存储过程 DECLARE DA CHAR(20),BB FLOAT ,SSA FLOAT SELECT DA= EXECUTE GET_MAX_AVG DA,BB OUTPUT ,SSA OUTPUT SELECT BB,SSA (4)参数是常数的调用 DECLARE BB FLOAT ,SSA FLOAT EXECUTE GET_MAX_AVG ,BB OUTPUT ,SSA OUTPUT SELECT BB,SSA (5)没有参数是返回全部值 CREATE PROC GET_NN AS SELECT S.S#,SNAME,COUNT(*)
3、A,AVG(GRADE) B FROM S,SC WHERE S.S#=SC.S# GROUP BY S.S#,SNAME GET_NN 2、游标的定义和使用 把表S里面的学号S#插入到新表TMP_SSS SELECT S# INTO TMP_SSS FROM S 在表TMP_SSS中增加一列SNAME ALTER TABLE TMP_SSS ADD SNAME CHAR (20) (1)用游标把表S中的同学的名字加到表TMP_SSS中新建的SNAME列中 DECLARE S# CHAR(20), SNAME CHAR(20) - 定义TMP_SSS表的变量 DECLARE YB CURSOR
4、 FOR -定义游标 SELECT S#, SNAME FROM S WHERE S# IN (SELECT S# FROM TMP_SSS) OPEN YB -打开游标 FETCH NEXT FROM YB INTO S#,SNAME WHILE FETCH_STATUS=0 - 循环体 BEGIN UPDATE TMP_SSS SET SNAME=SNAME -更新表TMP_SSS中的数据 WHERE S#=S# FETCH NEXT FROM YB INTO S#,SNAME END -循环结束 CLOSE YB -关闭游标BY DEALLOCATE YB -释放游标 SELECT *
5、FROM TMP_SSS - 查询新表 GO (2)用游标查找每个同学的单科成绩的最高分 显示学号,课程号,成绩 DECLARE S# CHAR(20),C# CHAR(18),GRADE -定义变量 DECIMAL (18,2) ,S#_PRE CHAR(20) DECLARE SC CURSOR FOR -定义游标 SELECT * FROM SC ORDER BY S#,GRADE DESC,C# SET S#_PRE=-1 -变量赋初值 SET NOCOUNT ON -每次查询不出现消息框的内容 DELETE FROM TMP_SC -反复插入时清空原有的数据 OPEN SC -打开游标 FETCH NEXT FROM SC INTO C#,S#,GRADE WHILE FETCH_STATUS=0 BEGIN IF (S#S#_PRE) BEGIN INSERT INTO TMP_SC VALUES (S#,C#,GRADE) SET S#_PRE=S# END FETCH NEXT FROM SC INTO S#,C#,GRADE END CLOSE SC DEALLOCATE SC -释放游标 SELECT * FROM TMP_SC