实验九:存储过程

1、创建一个存储过程proc1,计算从1加到100的奇数和偶数和,并分别输出结果。

DELIMITER $
CREATE PROCEDURE proc1()
BEGIN
DECLARE i,odd,even INT;
SET i=1;
SET odd=0;
SET even=0;
WHILE i<=100 DO
IF MOD(i,2)=1 THEN
SET odd=odd+i;
ELSE
SET even=even+i;
END IF;
SET i=i+1;
END WHILE;
SELECT odd,even;
END 
$
DELIMITER;

CALL proc1;

2、创建一个存储过程proc2。本次考试成绩较差,假定要提分,确保每人都通过。提分规则很简单,先每人都加2分,看是否通过,如果没有全部通过,每人再加2分,再看是否都通过,如此反复提分,直到所有学生都通过为止。但是要求成绩不能超过100分。

DELIMITER $$
CREATE PROCEDURE proc2()
BEGIN
DECLARE n INT;
w:WHILE 1=1 DO
SELECT COUNT(*) FROM sc WHERE grade<60 INTO n;
IF n>0 THEN
UPDATE sc SET grade=grade+2 WHERE grade<98 ;
ELSE
LEAVE w;
END IF;
END WHILE w;
END
$$
DELIMITER;

CALL proc2;

3、为sc表创建一个存储过程proc3,有三个参数,一个输入参数,输入课程号c_cno,两个输出参数c_avg,c_count,求这个课程号的平均成绩和总人数。

DELIMITER $$
CREATE PROCEDURE proc3(IN c_cno SMALLINT,OUT c_avg INT,OUT c_count INT)
BEGIN
SELECT AVG(grade) FROM sc WHERE cno=c_cno INTO c_avg;
SELECT COUNT(*) FROM sc WHERE cno=c_cno INTO c_count;
END
$$
DELIMITER;

SET @a=0;
SET @b=0;
CALL proc3(1,@a,@b);
SELECT @a,@b;

4、有程序员工资表prowage(id int,panme char(10),wage int),其中id是程序员工号,采用自动编号,pname是程序员姓名,wage是工资。

idpnamewage
1张三1900
2李四1200
3王五1800
4程程3500
5李阿斯2780

创建一个存储过程,对程序员的工资进行分析,如果有百分之五十的人薪水不到5000,给所有人加薪,每次加100,再进行分析,直到有一半以上的人大于5000元为止。存储过程执行完后,最终加了多少钱?每个人的工资为多少?

CREATE TABLE prowage(id INT,pname CHAR(10),wage INT);
INSERT INTO prowage VALUES(1,'张三',1900);
INSERT INTO prowage VALUES(2,'李四',1200);
INSERT INTO prowage VALUES(3,'王五',2000);
INSERT INTO prowage VALUES(4,'程程',3500);
INSERT INTO prowage VALUES(5,'张三丰',2780);

DELIMITER $$
DROP PROCEDURE IF EXISTS sum_wage;
CREATE PROCEDURE sum_wage(pwage INT,awage INT,OUT total INT)
BEGIN
SET total=0;
w:WHILE 1=1 DO
SELECT COUNT(*) FROM prowage INTO @a;
SELECT COUNT(*) FROM prowage WHERE wage>=pwage INTO @b;
IF @a>2*@b THEN
UPDATE prowage SET wage=wage+awage;
SET total=total+awage;
ELSE 
LEAVE w;
END IF;
END WHILE w;
SELECT *FROM prowage;
END 
$$
DELIMITER;

SET @ss=0;
CALL sum_wage(3000,100,@ss);
SELECT @ss;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值