-
2021-01-25 16:22:08
欢迎下载
四、实验内容及程序代码
1.sch数据表的表结构如表7.1所示,sch表的数据如表7.2。
表7.1 sch 表结构
字段名
数据类型
主键
外键
非空
唯一
自增
id
INT(10)
是
否
是
是
否
name
VARCHAR(50)
否
否
是
否
否
class
VARCHAR(50)
否
否
是
否
否
表7.2 sch 表的内容
id
name
class
1
李明
C1
2
小梅
C2
1)建表sch并插入数据。
2)创建一个存储函数,用来统计表sch中的记录数。
delimiter $$
create PROCEDURE count_sch5(out size int)
BEGIN
select count(*) into size from sch;
END
$$
delimiter;
3)创建一个存储过程,通过调用存储函数的方法来获取表sch中的记录数和sch表中id的和。
delimiter $$
create PROCEDURE count_sch2(out s_a int,out s_id int)
BEGIN
select count(*) into s_a from sch;
select sum(id) as s_id from sch;
END
$$
delimiter;
2.创建一存储过程insert_student_condition_user,利用自定义错误触发条件定义,当插入学生的性别不是“男”或“女”时结束存储过程,并提示“学生性别不正确”。
表7.3 student表结构
字段名
数据类型
主键
外键
非空
唯一
自增
sno
Char(10)
是
否
是
是
否
sname
VARCHAR(20)
否
否
是
否
否
ssex
CHAR(2)
否
否
是
否
否
Sage
smallint
否
否
是
否
否
Sdept
VARCHAR(30)
否
否
是
否
否
enterdate
datetime
否
否
是
否
否
delimiter $$
create PROCEDURE insert_student_condition_user(in sno int,in sname VARCHAR(20),
in ssex varchar(2),in sage int,in sdept varchar(30))
BEGIN
DECLARE continue handler for sqlstate '42S02' select '学生性别不正确';
if ssex='男' or ssex='女' THEN
insert into student values(sno,sname,ssex,sage,sdept);
end if;
end
$$ delimiter;
call insert_student_condition_user(1,'pqw','他',20,'C1');
call insert_student_condition_user(4,'pqw','1',20,'C1');
drop PROCEDURE insert_student_condition_user;
3.创建一存储过程update_student_borthyear,在学生表(表结构如表7.3)中添加字段”borthyear”(出生年份),在存储过程中利用游标,通过学生年龄计算出出生年份并修改表中对应字段。
create procedure update_student_borthyear(in s_no char(10))
BEGIN
declare s_age char(10);
declare state char(20);
declare cur cursor for select sage from student;
declare exit handler for 1329 set state='error';
open cur;
REPEAT
fetch cur into s_age;
update student set borthyear=2018-s_age where sno=s_no;
until state='error'
end repeat;
close cur;
END
call update_student_borthyear(201818);
mysql语句对于大小写不敏感,所以在写的时候要注意区分,整整找了半个小时的错误。 相关关键词:
更多相关内容 -
MySQL实验报告5(存储过程与函数)(1)(1).doc
2020-07-21 22:01:01PAGE PAGE 1 欢迎下载 四实验内容及程序代码 1.sch数据表的表结构如表7.1所示sch表的数据如表7.2 表7.1 sch 表结构 字段名 数据类型 主键 外键 非空 唯一 自增 id INT(10) 是 否 是 是 否 name VARCHAR(50) 否 否 是... -
数据库实验报告-存储过程、触发器
2018-05-29 20:47:52一、实验目的 1.了解存储过程的概念、优点 2.熟练掌握创建存储过程的方法 3.熟练掌握存储过程的调用方法 4.了解触发器的概念、优点 5.掌握触发器的方法和步骤 6.掌握触发器的使用 -
数据库函数、存储过程实验报告.doc
2021-10-05 08:52:03数据库函数、存储过程实验报告.doc -
实验9 存储过程的创建和使用
2020-04-22 12:47:36阅读实验教材《SQL Server 2012数据库管理与开发》第137页到155页的内容,掌握存储过程的概念、了解存储过程的类别(系统存储过程,用户自定义存储过程,扩展存储过程);掌握存储过程的建立;掌握存储过程的两种... -
MySQL实验报告5存储过程与函数11
2021-04-20 15:29:42四、实验内容及程序代码1、sch数据表的表结构如表7、1所示,sch表的数据如表7、2表7、1 sch 表结构字段名数据类型主键外键非空唯一自增idINT(10)就是否就是就是否n ameVARCHAR(50)否否就是否否classVARCHAR(50)否否就...四、实验内容及程序代码
1、sch数据表的表结构如表7、1所示,sch表的数据如表7、2
表7、1 sch 表结构
字段名
数据类型
主键
外键
非空
唯一
自增
id
INT(10)
就是
否
就是
就是
否
n ame
VARCHAR(50)
否
否
就是
否
否
class
VARCHAR(50)
否
否
就是
否
否
表7、2 sch表的内容
id
n ame
class
1
李明
C1
2
小梅
C2
1)建表sch并插入数据。
LMLdDdse uidriyeu
mysql> 匚reate table sch(
> i d i nt(10) pri mary key,
-> neme varchar(50) not null,
-> class varchar(50) not nul1);
Query OK, 0 rows affected (0.42 sec)
mysql> i nsert into sch values (1, ' 明"「匚1?儿〔2「小梅',rc2 r); Query OK, 2 rows affected CO. 10 sec^)
Records: 2 Duplicates: 0 Warnings: 0
创建一个存储函数,用来统计表sch中的记录数。
delimiter $$
create PROCEDURE coun t_sch5(out size int)
BEGIN
select coun t(*) into size from sch;
END
$$
delimiter;
TOC \o "1-5" \h \z tzmTI 1 rz <1 li rTt_£ <_ ki>
Qu ery OK w IL ir-ow aLiF"Fe
my s q 1 > sdaut住;
*—— *
I〒2已 I
鲁+
2 I
1 row i n 乞已七 €0. 0*0 s e
3)创建一个存储过程,通过调用存储函数的方法来获取表sch中的记录数与sch表中id的与。
delimiter $$
create PROCEDURE coun t_sch2(out s_a in t,out s_id int) BEGIN
select coun t(*) into s_a from sch;
select sum(id) as s_id from sch;
END
$$
delimiter;
++
I s_id I
44
I 3 I
1 row in set 〔0.01 sec)
2、创建一存储过程 in sert_stude nt_con dition_user,利用自定义错误触发条件定义
当插入学生的性别不就是“男”或“女”时结束存储过程,并提示“学生性别不正确”
表7、3 student表结构
字段名
数据类型
主键
外键
非空
唯一
自增
sno
Char(10)
就是
否
就是
就是
否
sn ame
VARCHAR(20)
否
否
就是
否
否
ssex
CHAR(2)
否
否
就是
否
否
Sage
smalli nt
否
否
就是
否
否
Sdept
VARCHAR(30)
否
否
就是
否
否
en terdate
datetime
否
否
就是
否
否
delimiter $$
create PROCEDURE insert_student_condition_user(insnoint,insname
VARCHAR(20),
in ssex varchar(2),i n sage in t,i n sdept varchar(30))
BEGIN
DECLARE continue han dler for sqlstate '42S02' select '学生性别不正确 ';
if ssex=' 男'or ssex=' 女'THEN
insert into stude nt values(s no,sn ame,ssex,sage,sdept);
end if;
end $$ delimiter;
她',20,'C1');call in sert_stude nt_con diti on _user(1,'pqw','
她',20,'C1');
drop PROCEDURE in sert_stude nt_co ndition_user;
信息
结栗1
畴兄
孚圭宓KIM
卜学主性別KU确
3、创建一存储过程update_student_borthyear,在学生表(表结构如表 7、3)中添加
字段” borthyear ”(出生年份),在存储过程中利用游标,通过学生年龄计算出出生年
份并修改表中对应字段。
create procedure update_stude nt_borthyear(i n s_no char(10))
BEGIN
declare s_age char(10);
declare state char(20);
declare cur cursor for select sage from stude nt;
declare exit han dler for 1329 set state='error';
ope n cur;
REPEAT
fetch cur into s_age;
update stude nt set borthyear=2018-s_age where sno=s_no;
un til state='error'
end repeat;
close cur;
END
srosnamessexugesdept
srosnamessex
uge
sdept
borthyea*
?
201818 pqwS
18
Ci
call update_stude nt_borthyear(201818);
mysql语句对于大小写不敏感,所以在写的时候要注意区分,整整找了半个小时的错误。
-
MySQL实验报告5(存储过程与函数)(1)(1).pdf
2021-09-30 18:03:15MySQL实验报告5(存储过程与函数)(1)(1).pdf -
《数据库系统实训》实验报告——存储过程
2021-04-15 20:14:15存储过程 第一部分:样例库的应用 1) 2) 3) 。。。。。。 第二部分:所选课题数据库的应用 1) 2) 3) 。。。。。。 参考文章存储过程
第一部分:样例库的应用
1) Creating Stored Procedures(创建存储过程)SQL语句描述:
create procedure productpricing( ) begin select avg(prod_price) as priceaverage from products; end;
功能描述:将查询产品平均价格存储为过程productpricing
执行结果截图:
2)Executing Stored Procedures(调用过程)
SQL语句描述:
CALL productpricing();
功能描述:调用过程,即查询产品平均价格
执行结果截图:
3)Dropping Stored Procedures(删除过程)
SQL语句描述:
DROP PROCEDURE productpricing;
功能描述:删除过程
执行结果截图:
4)Working with Parameters(带参的存储过程)
4.1)带输出参数:
SQL语句描述:
create procedure productpricing( out pl decimal(8,2), out ph decimal(8,2), out pa decimal(8,2) ) begin select min(prod_price) into pl from products; select max(prod_price) into ph from products; select avg(prod_price) into pa from products; end ;
功能描述:分别返回产品的最高、最低、平均价格,并存入三个变量中
执行结果截图:
创建成功后,查询结果如下
CALL productpricing(@pricelow,@pricehigh,@priceaverage) ; SELECT @pricelow,@pricehigh,@priceaverage;
4.2)带输入输出参数:
SQL语句描述:
create procedure ordertotal( in onumber int, out ototal decimal(8,2) ) begin select sum(item_price*quantity) from orderitems where order_num = onumber into ototal; end ;
功能描述:求出某特定订单号的总金额
执行结果截图:
创建成功后,查询结果如下
CALL ordertotal(20005, @total); SELECT @total;
5)Building Intelligent Stored Procedures(创建智能存储过程)
SQL语句描述:
create procedure ordertotal( in onumber int, in taxable boolean, out ototal decimal(8,2) ) begin -- declare variable for total declare total decimal(8,2); -- declare tax percentage declare taxrate int default 6; -- get the order total select sum(item_price*quantity) from orderitems where order_num = onumber into total; -- is this taxable? if taxable then -- yes, so add taxrate to the total select total+(total/100*taxrate) into total; end if; -- and finally, save to out variable select total into ototal; end;
功能描述:求是否含税的给定订单总金额
执行结果截图:
下图查询订单为20005号,且不含税的订单总金额。
下图查询订单为20005号,且含税的订单总金额。
6) Inspecting Stored Procedures(检查存储过程)
6.1)
SQL语句描述:
SHOW CREATE PROCEDURE ordertotal;
功能描述:显示用于创建一个存储过程ordertotal的CREATE语句,即定义语句的本身
执行结果截图:
6.2)
SQL语句描述:
SHOW PROCEDURE STATUS LIKE 'ordertotal' ;
功能描述:获得当前数据库中包括何时、何人创建等详细信息的存储过程列表,使用like关键字限制或指定一个过滤模式。
执行结果截图:
第二部分:所选课题数据库的应用
1) Creating Stored Procedures(创建存储过程)
SQL语句描述:
create procedure goodsnum() begin select count(*) as num from goods; end;
功能描述:查询商品个数
执行结果截图:
2)Executing Stored Procedures(调用过程)
SQL语句描述:
CALL goodsnum ();
功能描述:调用过程,即查询商品个数
执行结果截图:
3)Dropping Stored Procedures(删除过程)
SQL语句描述:
DROP PROCEDURE goodsnum;
功能描述:删除过程
执行结果截图:
4)Working with Parameters(带参的存储过程)
SQL语句描述:
create procedure goodsnum( in gid int, out dnum int(11) ) begin select goods_stock from goods where id = gid into dnum; end;
功能描述:查询某商品数量
执行结果截图:
创建成功后,查询结果如下
5) Inspecting Stored Procedures(检查存储过程)
SQL语句描述:
SHOW CREATE PROCEDURE goodsnum;
功能描述:显示用于创建一个存储过程goodsnum的CREATE语句,即定义语句的本身
执行结果截图:
参考文章
-
SQL存储过程总结 - sql server 2012数据库基础-存储过程及应用-实验报告
2020-02-18 13:15:08这是我大三第一学期《数据库基础》这门课的实验报告,总共15个实验,我挑了几个比较重要的放在博客上,方便查看和复习,尤其是最近SSM后端开发,希望对大家,以及将来的我有所帮助! 本文是存储过程,通过书本和...这是我大三第一学期《数据库基础》这门课的实验报告,总共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(最高) As select 学生.学号,学生.姓名,院系.名称 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 //传入三个参数 学号、课程号、成绩 as if(@sno is not null and @cno is not null) //如果学号和课程号不为空 begin update 选课 set 成绩 = @grade //更新这个学生这门课的成绩 where 选课.学号 = @sno and 选课.课程编号 = @cno; select 选课.学号,avg(选课.成绩) as 平均成绩 from 选课 //然后在查询这个学生的平均分 where 选课.学号 = @sno group by 选课.学号; end go exec 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) //参数 as if(@sno is not null) //如果主键不为空 begin select 学生.学号,学生.姓名,学生.性别,学生.生源,院系.名称,学生.状态 from 学生,院系 where 学生.院系 = 院系.编号 and 学生.学号 = @sno end go exec 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) //参数 as if(@cno is not null) //如果主键不为空 begin insert 课程 values('1000','不知名的高级课程','100001',2,'专业基础'); //插入 end go exec new_class '1000','不知名的高级课程','100001',2,'专业基础' //执行 drop procedure new_class //删除
图 6 更新前的课程
图 7 运行截图
图 8 更新后 多了一门插入的课
第三大题
注:把2.2题的代码拿来用,发现存储过程的代码就像是C++中的自定义函数,可以接受若干个参数,来实现需要的功能。那种多次执行某一个功能的时候,收益最大。
图 9 存储过程 代码
图 10 普通查询代码
-
存储过程及触发器实验报告.pdf
2021-10-04 05:32:05存储过程及触发器实验报告.pdf -
数据库技术与应用:实验五 视图_存储过程和触发器.docx
2021-09-20 09:34:00数据库技术与应用:实验五 视图_存储过程和触发器.docx -
SQL Server数据库实验_存储过程与触发器设计.docx
2021-08-11 08:10:29实验5.1 存储过程的建立与使用 一、实验目的 理解存储过程的概念、作用、建立和调用方法。 二、实验原理 使用CREATE PROCEDURE语句创建存储过程,ALTER PROCEDURE语句修改存储过程,DROP PROCEDURE语句删除存储过程... -
操作系统动态分区存储管理实验报告.docx
2020-03-25 17:05:03熟悉主存的分配与回收 理解在不同的存储管理方式下如何实现主存空间的分配与回收 掌握动态分区分配方式中的数据结构和分配算法及动态分区存储管理 方式及其实现过程 实验原理 建立两张表空闲表和已分配表分别将未... -
数据库原理及应用A实验报告(实验三——存储过程与触发器)
2022-04-23 17:27:26了解存储过程的概念、优点 熟练掌握创建存储过程的方法 熟练掌握存储过程的调用方法 了解触发器的概念、优点 掌握触发器的方法和步骤 掌握触发器的使用 二、实验环境 Windows10 Oracle database 12.1.... -
大型数据库实验报告存储过程和函数(实验九).doc
2021-02-08 07:36:21大型数据库实验报告存储过程和函数(实验九)课程实验报告(实验9)课程名称 大型数据库专业班级 软件姓 名 周学 号 1511311143指导教师 毛应爽计算机技术与工程学院实验教学考核和成绩评定办法课内实验考核成绩,严格... -
汉字字库存储芯片扩展实验报告(完整)+代码
2021-04-28 09:37:24华中科技大学计算机组成原理实验报告(完整)+代码参考 ---自己写的 1.理解存储系统进行位扩展、字扩展的基本原理 2.能利用相关原理解决实验中汉字字库的存储扩展问题 3.并能够使用正确的字库数据填充。 -
存储过程及触发器的实验报告
2019-03-17 21:48:09实验目的:进一步了解关于存储过程和触发器的定义及实现 实验名称:存储过程、触发器的定义以及验证 实验内容:完成以下关于存储过程和触发器的定义以及验证。 1.[例7.50] 输入某个同学的学号,统计该同学的平均... -
MATLAB实验五实验报告
2020-10-24 18:40:25存储内容包括学生基本信息(姓名、出生年月、籍贯、联系电话、信箱号等)、课程信息(课程名称、任课老师、教材、学时、学分、成绩等)、其他信息(担任职务、发表文章、参加竞赛、毕业设计等)。根据这些内容设计出... -
实验5 视图和存储过程个人实验报告.doc
2020-10-28 22:10:50--5 创建存储过程,利用out参数实现存储过程的返回值:根据输入的员工编号,返回员工总工资。调用存储过程。 create or replace procedure procedure_5(empno_5 emp.empno%type, sal_5 out emp.sal%type) is begin ... -
实验六 存储过程与触发器的创建实验bySixdb.pdf
2020-06-25 11:36:17存储过程与触发器的创建实验 报告、个人总结 内附详细的实验步骤,包含SQL源码及操作截图 更加详细的介绍请查看liushendb的博客《数据库实验——存储过程与触发器的创建实验by SixInNight》 -
MySQL数据库实验六:存储过程建立与调用
2021-01-18 23:08:01实验六 存储过程建立与调用一、实验目的理解存储过程的概念、建立和调用方法。二、实验环境三、实验示例1、定义一个函数,按性别计算所有学生的平均年龄。CREATE FUNCTION aver_age(@sex char(2)) RETURNS ... -
Oracle存储过程总结(一、基本应用)
2021-05-07 04:56:47Oracle 存储过程总结 基本应用技巧,大家可以学习下oracle存储过程最基本的东西。1、创建存储过程create or replace procedure test(var_name_1 in type,var_name_2 out type) as--声明变量(变量名 变量类型)begin--... -
存储过程及触发器实验报告.doc
2021-10-10 16:27:25存储过程及触发器实验报告.doc