实验
一、
实验要求:
1. 理解存储过程的概念
2. 掌握存储过程的语法格式、使用方法
3. 掌握存
储过程的创建、执行
二、实验前提:(建表):
-- drop table if exists student;
-- Create table student
-- (Id varchar(255), #学号
-- Name varchar(255), #姓名
-- Roomid varchar(255), #班级
-- Sex char(1), #性别
-- Degree varchar(3) );#成绩;
Insert into student value
s('1','amy','8','0','65');
Insert into student values('2','bob','4','1','80');
Insert into student values('3','candy','6','0','70');
Insert into student values('4','danny','8','1','90');
Insert into student values('5','edward','8','1','95');
Insert into student values('6','frank','7','1','100');
1:创建一个存储过程,实现查询表student中的记录信息,并执行存储过程
建一个存储
delimiter //
DROP PROCEDURE IF EXISTS st2;
CREATE PROCEDURE st2()
BEGIN
select * from student;
END
//
CALL st2()
2:创建一个存储过程,根据给定的学生学号返回该学生的姓名
delimiter //
DROP PROCEDURE if exists st3;
CREATE PROCEDURE st3(in i int,out y VARCHAR(20))
BEGIN
SELECT NAME INTO y from student WHERE id = i;
END
//
CALL st3(5,@y);
SELECT @y;
3:创建一个存储过程,根据所给的班级的编号,统计该班人数,并将人数以输出变量返回给用户。
delimiter //
DROP PROCEDURE if EXISTS st4;
CREATE PROCEDURE st4(IN i VARCHAR(20),out y int)
BEGIN
SELECT count(*) into y FROM student WHERE roomid = i GROUP BY Roomid;
END
//
call st4(8,@y);
SELECT @y;
4:创建一个存储过程,根据所给的学号查询该学生的考试分数是否超过了85分, 若超过则输出“ 考得好”, 否则输出 “考得不好”。
id
>85 "考的好"
考的不好
delimiter //
DROP PROCEDURE if EXISTS st4;
CREATE PROCEDURE st4(IN i int)
BEGIN
if (SELECT degree FROM student WHERE id = i) > 85 THEN
SELECT "考的好";
ELSE
SELECT"考的不好";
END IF;
END
//
call st4(6)
实验5:创建一个存储过程,对表student增加两条记录。
delimiter //
drop PROCEDURE if exists st5;
CREATE PROCEDURE st5(in i int,in j varchar(255),in k varchar(255),in l char(255),in n int)
BEGIN
INSERT INTO student values(i,j,k,l,n);
SELECT * FROM student;
END
//
CALL st5(7,'niuqi',6,1,69)
CALL st5(8,'laoliu',8,0,99)
6:请撰写一个存储过程,输出各班学生的平均成绩。
delimiter //
drop procedure if exists st6;
CREATE PROCEDURE st6()
BEGIN
SELECT avg(degree) from student GROUP BY roomid;
END
//
call st6()
7:请撰写一个存储过程,能根据用户输入的学号,输出学生的姓名、性别到两个参数变量中,以供其它程序使用。
delimiter //
DROP procedure if EXISTS st7;
CREATE PROCEDURE st7(in i int,out n VARCHAR(20),out s int)
BEGIN
SELECT name,sex INTO n,s from student WHERE id = i;
END
//
call st7(1,@n,@s);
SELECT @n,@s;
8:撰写一个存储过程,根据用户输入的学号,输出学生性别,成绩两个参数放到新表temp中Create table temp(Sex varchar(255),Degree varchar(255));
两张表的字段一致,插入数据:
方法一:insert into 目标表 select * from 来源表;#插入全部数据
方法二:insert into 目标表(字段 )select 字段1,字段2 from 来源表。
9:请撰写一个存储过程,求1+2+3+…x的值。
请撰写一个存储过程,求0+2+4+…x的值。
请撰写一个存储过程,求1+3+5+…x的值。
1)
方法一:(利用计算公式(i+1)*i/2;)
delimiter //
drop PROCEDURE if exists yy;
create procedure yy(in i int)
BEGIN
declare j int ;
set j=(i+1)*i/2;
select j;
end
//
方法二:
call mm(4);delimiter //
DROP PROCEDURE if EXISTS mm;
CREATE PROCEDURE mm(in x VARCHAR(255))
BEGIN
DECLARE a int DEFAULT 1;
DECLARE b int DEFAULT 0;
WHILE (a<x+1) DO
set b=b+a;
set a=a+1;
END WHILE;
SELECT b;
end
//
call mm(8);
call yy(6)
方法三:
delimiter //
drop PROCEDURE if exists yy;
create procedure yy(in i int,out y int)
BEGIN
declare j int default 0 ;
while (i>0) DO
set j=i+j;
set i=i-1;
end while;
set y=j;
end
//
call yy(3,@x)
select @x
方法四:
delimiter//
DROP PROCEDURE if EXISTS xx;
CREATE PROCEDURE xx(IN x int )
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE x1 int ;
set x1=x;
WHILE (i<x) DO
set x1=i+x1;
set i=i+1;
END WHILE ;
set x=x1;
SELECT x;
END
//
call xx(9);
(2)偶数和
call mm(4);delimiter //
DROP PROCEDURE if EXISTS mm;
CREATE PROCEDURE mm(in x VARCHAR(255))
BEGIN
DECLARE a int DEFAULT 2;
DECLARE b int DEFAULT 0;
WHILE (a<x+1) DO
set b=b+a;
set a=a+2;
END WHILE;
SELECT b;
end
//
(3)奇数和
call mm(4);delimiter //
DROP PROCEDURE if EXISTS mm;
CREATE PROCEDURE mm(in x VARCHAR(255))
BEGIN
DECLARE a int DEFAULT 2;
DECLARE b int DEFAULT 0;
WHILE (a<x+1) DO
set b=b+a;
set a=a+1;
END WHILE;
SELECT b;
end