为什么我的存储过程 return NULL 在下面的查询中?

Why does my Stored Procedure return NULL in the below query?

我创建了一个 table 并添加了一些列,现在我希望它在主题为“计算机科学”时将 s_scourse 输出为“B.Tech”。 但它显示为空。为什么???

这些是我的示例数据:

create table student(name varchar(50),age int,subject varchar(100));

insert into student values("Tanmay",18,"MAths"),("Rani",19,"Computer Science"),("Rose",20,"Computer Application");
delimiter 

这是我的程序:

create procedure get_students(in subject_name varchar(50),out s_scourse varchar(50))
begin
declare sub varchar(50);
select subject from student
where subject=subject_name;
if sub="Computer Science"
then set s_scourse="B.tech";
end if;
end//
delimiter ;
call get_students("Computer Science",@s_scourse);
select @s_scourse;

您忘记使用INTO给变量赋值:

select subject 
INTO sub
from student
where subject=subject_name;

您应该将值分配给变量,例如 sub:=subject

declare sub varchar(50);

select sub:=subject from student
where subject=subject_name;

if sub="Computer Science"
then set s_scourse="B.tech";
end if;

如果要将s_scourse作为存储过程的输出变量,可以简化代码,无需声明局部变量'sub'。一个简单的 case..when 语句就足够了:

delimiter //
create procedure get_students(in subject_name varchar(50),out s_scourse varchar(50))
begin
select (case when subject_name="Computer Science" then "B.tech" else "Not B.tech" end) into s_scourse 
from student2
where subject=subject_name;
end//
delimiter ;
call get_students("Computer Science",@s_scourse);
select @s_scourse;

在主题输入是“计算机科学”的情况下,输出变量的值将是“B.tech”。对于其他主题(在您创建的 table 中),我将默认设置为 "Not B.tech" 。您可以根据您的要求进行更改。