编写存储过程,要求当“大数据技术与应用”专业的学生来就餐时,调用该存储过程,输入学号,能自动识别出该生的专业,并为“大数据技术与应用”专业的学生就餐费用打九折。
CREATE TABLE `student` (
`stu_no` int(11) NOT NULL,
`subject` varchar(32) DEFAULT NULL,
PRIMARY KEY (`stu_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `data_liri`.`student`(`stu_no`, `subject`) VALUES (1, '大数据技术与应用');
INSERT INTO `data_liri`.`student`(`stu_no`, `subject`) VALUES (2, '大数据技术与应');
INSERT INTO `data_liri`.`student`(`stu_no`, `subject`) VALUES (3, '大数据技术与应用4');
DROP PROCEDURE IF EXISTS PROC_DINNER;
CREATE PROCEDURE PROC_DINNER(no int, cost float)
BEGIN
declare c float;
set @s := '';
set @s := (select subject from student where stu_no = no);
if @s = '大数据技术与应用'
then
set c = cost * 0.9;
else
set c = cost;
end if;
select c;
end;
测试用例:call proc_dinner(1,200);
返回结果:180
不知道满不满足你描述的需求,这个逻辑要求学生表以学号为主键。
传2个参数,学号和金额到存储过程,查询学生表就可以了。
参考:
mysql> delimiter $$
mysql> create procedure in_param(in p_in int)
-> begin
-> select p_in;
-> set p_in=2;
-> select P_in;
-> end$$
mysql> delimiter ;
/创建存储过程/
CREATE PROCEDURE proc_select--建立存储过程
@Sno char(10) output,--输入输出参数636f70793231313335323631343130323136353331333431356134
@Sname varchar(20) out,--输出参数
@Cno char(4) out,--输出参数
@grade tinyint out--输出参数
AS
SELECT @Sname=Sname,@Sno=Student.Sno,@Cno=cno,@grade=grade --select里面写输出参数
FROM Student,SC --从学生表,选修表中查询
where @Sno=Student.Sno--where里面写输入参数
/根据给定学号查询/
CREATE PROC proc_lab4 --存储过程中含有游标
@Sno char(10)
as
declare @ssno char(10),@ssname char(20),@ccname char(20),@scg int--声明四个变量
declare cursor_s cursor--声明游标
for
select Student.Sno,Sname,Cname,grade
from Student,Course,SC--从三个表中选择学号、姓名、课程名、成绩
where Student.Sno=SC.Sno and Course.Cno=SC.Cno and Sname=@Sname;--连接
open cursor_s--打开游标
fetch next from cursor_s into @ssno,@ssname,@ccname,@scg
while @@fetch_status=0
begin
print @ssno+@ssname+@ccname+convert(char(10),@scg)
fetch next from cursor_s into @ssno,@ssname,@ccname,@scg
end
close cursor_s--关闭游标
deallocate cursor_s--释放游标
exec proc_lab4 '201215121'
--只带输入参数
CREATE PROC p2
@sno char(10)
as
select Student.Sno,Sname,Cname,grade
from Student,SC,Course
where Student.Sno=SC.Sno and SC.Cno=Course.Cno
and Sname=@sname