2014-04-11 47 views
-1
DECLARE candidate CURSOR FOR 
      SELECT `ce_agr_perc`, `ce_year_of_passing`, `ql_id`,`ua_id`, 
        `sb_id`, `ps_id` ,`ce_id`, c_id 
      FROM `candidate_education` 
      WHERE c_id IN (SELECT c_id FROM `candidate`) 
      ORDER BY c_id; 

DECLARE CONTINUE HANDLER FOR NOT FOUND SET d = 0; 

TRUNCATE TABLE `candidate_tag_string_copy`; 
OPEN candidate; 

read_loop: LOOP 
    FETCH candidate 
    INTO ceagrperc, ceyearofpassing, qlid, uaid, sbid, psid, ceid, cid; 

    IF d=1 THEN 
     LEAVE read_loop; 
    END IF; 
    IF NOT d=1 THEN 
     SELECT ql_short_code INTO qlcode FROM qualification_level 
     WHERE ql_id=qlid; 
     SELECT `us_short_code` INTO usshortcode FROM `university_affiliation` 
     WHERE ua_id=uaid; 
     SELECT `short_code` INTO shortcode FROM `school_boards` 
     WHERE sb_id=sbid; 
     SELECT `ds_id`,`dp_id` INTO dsid,dpid FROM `programe_specialization` 
     WHERE `ps_id`=psid; 
     SELECT `dp_short_code`, `dp_degree_edu_level` 
     INTO dpshortcode, dpdegreeedulevel 
     FROM `degree_programe` 
     WHERE `dp_id`=dpid; 
     SELECT `ds_short_code` INTO dsshortcode FROM `degree_specialization` 
     WHERE `ds_id`=dsid; 

     IF qlcode='UG' THEN 
      SELECT CONCAT('{', qlcode,';', dpshortcode, '-', 
           dsshortcode, ';', usshortcode, ';', 
           ceagrperc, ';', ceyearofpassing, '}') 
      INTO ctsstring ; 
      INSERT 
      INTO `candidate_tag_string_copy` 
         (`c_id`, `cts_tag_class`, `cts_fk_id`, `cts_string`) 
      VALUES(cid, 'edu', ceid, ctsstring); 
     END IF; 

     IF qlcode='PG' THEN 
      SELECT CONCAT('{', qlcode, '::', ';', dpshortcode, '-', 
           dsshortcode, ';', usshortcode, ';', 
           ceagrperc, ';', ceyearofpassing, '}') 
      INTO ctsstring ; 
      INSERT 
      INTO `candidate_tag_string_copy` 
         (`c_id`, `cts_tag_class`, `cts_fk_id`, `cts_string`) 
      VALUES(cid,'edu2',ceid,ctsstring); 
     END IF; 

     IF qlcode='XII' THEN 
      SELECT CONCAT('{', qlcode, ';', dpshortcode,'-', 
           dsshortcode, ';', usshortcode, ';', 
           ceagrperc, ';', ceyearofpassing, '}') 
      INTO ctsstring ; 
      INSERT 
      INTO `candidate_tag_string_copy` 
         (`c_id`, `cts_tag_class`, `cts_fk_id`, `cts_string`) 
      VALUES(cid, 'edu', ceid, ctsstring); 
     END IF; 

     IF qlcode='X' THEN 
      SELECT CONCAT('{', qlcode, ';', dpshortcode, '-', 
          dsshortcode, ';', usshortcode, ';', 
          ceagrperc, ';', ceyearofpassing, '}') 
      INTO ctsstring ; 
      INSERT 
      INTO `candidate_tag_string_copy` 
         (`c_id`, `cts_tag_class`, `cts_fk_id`, `cts_string`) 
      VALUES(cid, 'edu4', ceid, ctsstring); 
     END IF; 
    END IF; 
END LOOP; 

CLOSE candidate; 
+0

我在这样的情况下做的第一件事,就是确保所有的代码是否正确缩进。你可能有一个简单的错误,但你的缩进很难确定。 –

+0

@ user2071660:变量'd'声明的默认值是多少?那是'1'还是'0'? –

回答

0

按照文件上Fetch Statement

如果你获取了过去在结果集中的最后一行,则目标字段或变量的值是不确定的,并且NOTFOUND属性返回TRUE

注意:上面的语句是从Oracle光标文件,但适用于其他人。

我不知道你怎么申报默认值变量dcursor handler使用。但是,我坚信这个问题是因为没有正确处理dnot found)值。

如果我是你,我早就编码方式类似于以下内容:

declare not_found boolean default false; 
... 
declare continue handler for not found set not_found = true; 
... 
read_loop: LOOP 
    FETCH candidate 
    INTO ceagrperc, ceyearofpassing, qlid, uaid, sbid, psid, ceid, cid; 

    IF not_found THEN 
     LEAVE read_loop; 
    END IF; 

    ... 
    ... 
end loop; 
... 
相关问题