MySQL实验报告5存储过程与函数11x

四、实验内容及程序代码

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语句对于大小写不敏感,所以在写的时候要注意区分,整整找了半个小时的错误。