为什么我的存储过程 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" 。您可以根据您的要求进行更改。
我创建了一个 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" 。您可以根据您的要求进行更改。