我创建了两个表学生和成绩。 student表包含id(PK)列,名称,标记,地址。我插入了10个值。在等级表中有两个coulmns stud_id(外键)和stud_status。在等级中我必须在商店程序中写一个光标,从学生表中插入成绩表。如果学生商标在年级表中高于50,那么它应该在stud_status中存储为'G',而stud_id也应该存在。如果mark = 50则应存储'E',否则为'L' 我使用下面的代码。和iam使用MySQL Workbench 6.0。
use test;
delimiter $$
drop procedure if exists `p_status` $$
create procedure `p_status`()
begin
declare s_stud_mark int(111);
declare s_stud_id int(111);
declare cur_stud cursor For Select stud_id,stud_mark from student where stud_id is not null;
open cur_stud;
fetch cur_stud into s_stud_mark,s_stud_id;
if(stud_mark > 50) then
set s_stud_mark='G';
insert into grade(`stud_id`,`stud_staus`)values(s_stud_id,s_stud_mark);
else if(stud_mark = 50) then
set s_stud_mark='E';
insert into grade(`stud_id`,`stud_status`) values(s_stud_id,s_stud_mark);
else
set s_stud_mark='L';
insert into grade(`stud_id`,`stud_status`)values(s_stud_id,s_stud_mark);
end if ;
end if ;
close cur_stud;
end $$
delimiter ;
但它显示错误为“错误代码:1054。'字段列表'中的未知列'stud_mark'”
任何人回复
答案 0 :(得分:2)
错误在于行:
if(stud_mark > 50) then
...
else if(stud_mark = 50) then
将它们更改为:
if(s_stud_mark > 50) then
...
else if(s_stud_mark = 50) then
更新1 :
但是另一个错误显示“错误代码:1366。错误的整数值:第11行的's_stud_mark'列'G'
这是因为,您在表格中将stud_mark
定义为int
,但是您在例程中为其分配char
。实际上,您应该在例程中定义变量s_stud_status
,并为其分配值set s_stud_status='G';
同样,对于例程中的其他等级值。
并在需要时更改以下代码。
if(s_stud_mark > 50) then
set s_stud_status='G';
insert into grade(`stud_id`,`stud_status`) values(s_stud_id,s_stud_status);
else ...
set s_stud_status='E';
...