【问题标题】:insert into the table from one to another using cursor in store procedure在存储过程中使用游标从一个到另一个插入表
【发布时间】:2014-01-09 02:29:06
【问题描述】:

我创建了两个表学生和年级。学生表包含 id(PK),name,mark,address 列。我在其中插入了 10 个值。在等级表中有两个列 stud_id(外键)和 stud_status。在年级我必须在存储过程中编写一个游标,从学生表插入到成绩表中。如果学生分数在成绩表中高于 50,则该条件将在 stud_status 和 stud_id 中存储为“G”。如果标记 = 50,则应存储“E”,否则为“L” 我使用下面的代码。我正在使用 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'”

有人回复

【问题讨论】:

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


    【解决方案1】:

    错误在行中:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-17
      • 1970-01-01
      相关资源
      最近更新 更多