这个怎么搞,加急,加急

编写存储过程,要求当“大数据技术与应用”专业的学生来就餐时,调用该存储过程,输入学号,能自动识别出该生的专业,并为“大数据技术与应用”专业的学生就餐费用打九折。

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