MySQL实验报告5存储过程与函数11x
时间:2020-10-07 12:29:00 来源:勤学考试网 本文已影响 人
四、实验内容及程序代码
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_£ <_ K i ;
Qu ery OK w IL ir-ow aLiF"Fe<z t ed CO' - 08 se<= 5
my s q 1 > sdaut 住;
*—— *
I 〒2已 I
鲁 +
2 I
1 row i n 乞已七 €0. 0*0 s e<z J
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
4 4
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(in sno int,in sname
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
sro sname ssexugesdept
sro sname ssex
uge
sdept
borthyea*
?
201818 pqw S
18
Ci
call update_stude nt_borthyear(201818);
mysql语句对于大小写不敏感,所以在写的时候要注意区分,整整找了半个小时的错误。