使用存储过程中的游标从一个插入到另一个表中

时间:2013-12-20 09:13:41

标签: mysql stored-procedures cursor mysqldump mysql-workbench

我创建了两个表学生和成绩。 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'”

任何人回复

1 个答案:

答案 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';
  ...