2013-12-20 78 views
1

我創建了兩個表格學生和等級。學生表包含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'」

有人回覆

回答

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不正確的整數值: 'G' 列 's_stud_mark' 在列11

這是因爲您在表格中定義了stud_markint,但您在例程中將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'; 
    ... 
+0

感謝代碼運行成功。 – Benny

相關問題