这是我大三第一学期《数据库基础》这门课的实验报告,总共15个实验,我挑了几个比较重要的放在博客上,方便查看和复习,尤其是最近SSM后端开发,希望对大家,以及将来的我有所帮助!

本文是存储过程,通过书本和网上的参考代码和讲解,大致把存储过程理解为一个自定义函数,在多次重复使用某一个功能的时候,可以把这个功能写成一个自定义函数(存储过程),这样使代码可读性增加,逼格也更高......


实验要求

在实验5数据库设计的基础上补充设计存储过程,并基于实验5建立的表和实验6插入的数据完成实验;

1. 按要求设计完成如下功能的存储过程;

        ①查询平均分数在x到y范围内的学生信息。说明:该存储过程有两个参数;要求查询的学生信息包括学号、姓名、院系名称和平均分数。

         ②更新操作,以学号、课程编号和考试成绩作参数更新指定学生和课程的考试成绩,并返回该学生的平均成绩。

2. 自行再分别设计一个完成查询和完成操作功能的存储过程(在实验报告中要准确描述功能需求);

3. 在客户端以存储过程和输入SQL语句的方式分别执行相同的查询或操作,比较使用和不使用存储过程的区别;


全部总结链接

SQL基础   (数据库、表、数据的增删改查、视图相关,以及所有实验报告源代码)

游标 (类似C++ 的 指针)

存储过程(类似 C++ 的自定义函数)

触发器 (类似 自定义的陷阱,或者说是监听器,满足某个条件了执行某个方法)

用户权限及权限管理 (类似Windows的多用户管理)

并发控制 (了解多个用户同时对数据造成错误的情况 和 解决方法)

数据恢复(当数据库数据丢失,相应的解决方法)


实验过程

第一大题

1.1查询平均分数在x到y范围内的学生信息

令x = 80 , y = 88

代码:

create procedure aaa         //创建存储过程 名字为aaa@s smallint, @e smallint     //传入两个参数@s(最低),@e(最高)Asselect 学生.学号,学生.姓名,院系.名称 as 院系名称,avg(选课.成绩) as 平均成绩 from 学生,选课,院系where 学生.学号 = 选课.学号 and 学生.院系 = 院系.编号   //以上查询每个学生的学号、姓名、院系名称、平均成绩group by 学生.学号,学生.姓名,院系.名称      //对学号进行分组 having avg(选课.成绩) between @s and @e;     //筛选平均分条件go   //暂停作用exec aaa 80,88; //执行drop procedure aaa  // 删除

注:存储过程可以理解为C++中的自定义函数,先定义,然后通过主函数调用

图 1 查询平均分数在80到88范围内的学生信息


1.2更新操作,以学号、课程编号和考试成绩作参数更新指定学生和课程的考试成绩,并返回该学生的平均成绩。

代码:

Create  procedure  new_data    //创建存储过程 名字为new_data@sno char(8), @cno char(8), @grade smallint  //传入三个参数 学号、课程号、成绩asif(@sno is not null and @cno is not null)  //如果学号和课程号不为空beginupdate 选课 set 成绩 = @grade   //更新这个学生这门课的成绩where 选课.学号 = @sno and 选课.课程编号 = @cno;select 选课.学号,avg(选课.成绩) as 平均成绩from 选课        //然后在查询这个学生的平均分where 选课.学号 = @snogroup by 选课.学号;endgoexec new_data '2000278','1156',99;  //执行drop procedure new_data  //删除

注:为了不给后续实验造成干扰,所以我手动插入了这一个数据

图 2   第1.2题更新前 成绩为80分

然后执行代码,因为这个学生只有这一门课,所以平均分就是99分

图 3  更新成绩 输出平均分

图 4  第1.2题更新后  成绩为99分


第二大题

自行再分别设计一个完成查询和完成操作功能的存储过程

2.1完成查询功能

功能:输入一个学生的学号,输出其学号、姓名、性别、生源、院系名称和状态

代码:

create  procedure  new_find //创建存储过程 名字为new_find@sno char(8)    //参数asif(@sno is not null)    //如果主键不为空beginselect 学生.学号,学生.姓名,学生.性别,学生.生源,院系.名称,学生.状态from 学生,院系where 学生.院系 = 院系.编号 and 学生.学号 = @snoendgoexec new_find '2000012'    //执行drop procedure new_find    //删除

图 5  查询学号为2000012的学生信息


2.2完成操作功能

功能:新增一门课程,插入到课程表

代码:

create  procedure  new_class   //创建名为new_class的存储过程@cno char(8), @cname char(20), @ctea char(8), @time smallint, @xz char(10)  //参数asif(@cno is not null)   //如果主键不为空begininsert 课程 values('1000','不知名的高级课程','100001',2,'专业基础');  //插入endgoexec new_class '1000','不知名的高级课程','100001',2,'专业基础'   //执行drop procedure new_class   //删除

图 6 更新前的课程

图 7 运行截图

图 8 更新后 多了一门插入的课


第三大题

注:把2.2题的代码拿来用,发现存储过程的代码就像是C++中的自定义函数,可以接受若干个参数,来实现需要的功能。那种多次执行某一个功能的时候,收益最大。

图 9 存储过程 代码

图 10  普通查询代码

SQL存储过程总结 - sql server 2012数据库基础-存储过程及应用-实验报告相关推荐

  1. SQL触发器总结 - sql server 2012数据库基础-触发器及应用-实验报告

    这是我大三第一学期<数据库基础>这门课的实验报告,总共15个实验,我挑了几个比较重要的放在博客上,方便查看和复习,尤其是最近SSM后端开发,希望对大家,以及将来的我有所帮助! 实验要求 在 ...

  2. SQL数据恢复总结 - sql server 2012数据库基础-数据恢复-实验报告

    数据恢复是对数据库进行备份和还原,当数据库因为各种原因被损坏或者无法读取的时候,会造成无法估量的后果,这个时候就需要数据库还原工具,进行还原. 数据库故障分为"软故障"和" ...

  3. 《PowerShell V3——SQL Server 2012数据库自动化运维权威指南》——2.13 创建视图...

    本节书摘来自异步社区出版社<PowerShell V3-SQL Server 2012数据库自动化运维权威指南>一书中的第2章,第2.13节,作者:[加拿大]Donabel Santos, ...

  4. 数据库原理与应用实验指导书 实验一:熟悉SQL Server 2012数据库管理系统

    数据库原理与应用实验指导书 实验一:熟悉SQL Server 2012数据库管理系统 实验类型: 综合性 实验要求: 必修 适用对象: 信息管理与信息系统.计算机科学与技术.软件工程.物联网工程 一. ...

  5. 《PowerShell V3——SQL Server 2012数据库自动化运维权威指南》——2.8 创建数据库...

    本节书摘来自异步社区出版社<PowerShell V3-SQL Server 2012数据库自动化运维权威指南>一书中的第2章,第2.8节,作者:[加拿大]Donabel Santos,更 ...

  6. SQL Server 2012 数据库镜像配置完整篇

    "数据库镜像"是一种提高 SQL Server 数据库的可用性的解决方案. 镜像基于每个数据库实现,并且只适用于使用完整恢复模式的数据库.数据库镜像维护一个数据库的两个副本,这两个 ...

  7. 《PowerShell V3——SQL Server 2012数据库自动化运维权威指南》——1.5 安装SMO

    本节书摘来自异步社区出版社<PowerShell V3-SQL Server 2012数据库自动化运维权威指南>一书中的第1章,第1.5节,作者:[加拿大]Donabel Santos,更 ...

  8. 《PowerShell V3——SQL Server 2012数据库自动化运维权威指南》——2.19 使用bcp实施批量导出...

    本节书摘来自异步社区出版社<PowerShell V3-SQL Server 2012数据库自动化运维权威指南>一书中的第2章,第2.19节,作者:[加拿大]Donabel Santos, ...

  9. [转] sql server 跨数据库调用存储过程

    A库存储过程: create PROCEDURE [dbo].[spAAAForTest] ( @UserName nvarchar(20) =null ,@LoginPwd nvarchar(60) ...

最新文章

  1. C语言----字符串左旋
  2. IOS开发CALayer隐式动画
  3. 信息系统项目管理师 必背
  4. Qt中rcc工具简介
  5. AIX使用vi时报History file has no read permission
  6. Django Rest Framework 视图和路由
  7. java自我介绍_JAVA面试技巧之自我介绍
  8. 如何在Xbox One或PlayStation 4上为Skyrim特别版安装Mods
  9. PostgreSQL PL / java简介
  10. rails_Rails应用程序必备的宝石
  11. java--jdk安装教程
  12. viper4android 机顶盒,利用VIPer53封装上系统实现经济型机顶盒供电
  13. ps使用抽出滤镜抠头发
  14. adobe flash java_Adobe 发布最后的 Flash 更新:官方强烈建议立即卸载
  15. 一次内存泄露的分析及总结
  16. Python可视化配色方案,分分钟实现配色自由啦~
  17. BZOJ 2121: 字符串游戏
  18. React-18--css in js
  19. 使用Acrobat时,怎样使其默认页面显示方式为启用滚动
  20. 竣达技术丨智能精密空调网络监控终端的功能及技术特性

热门文章

  1. 优先队列 以及 sort对 pari 的自定义排序
  2. 37. 实战:Xpath+线程池实现抓取任意完整小说一千余节到本地txt文件/模板任意小说网站可套用(附源码)
  3. Redis笔记(3): Redis持久化
  4. 软件RAID与硬件RAID的区别
  5. 【Tomcat】贰-Tomcat集成到Idea:解放双手,让Tomcat的操作没有那么难用
  6. postman测试restful接口
  7. Android Studio Maven仓库设置aliyun、google、jcenter
  8. 客户下单,自动分单,生成工单 发送短信 演...
  9. 最新全志智能扫地机高性能芯片方案-MR133介绍
  10. jdbc事务:模拟银行转账业务