Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 最后一行在存储过程中插入多次该怎么办_Mysql_Stored Procedures_Cursor - Fatal编程技术网

Mysql 最后一行在存储过程中插入多次该怎么办

Mysql 最后一行在存储过程中插入多次该怎么办,mysql,stored-procedures,cursor,Mysql,Stored Procedures,Cursor,根据 如果获取超过结果集中的最后一行,则目标字段或变量的值不确定,NOTFOUND属性返回TRUE 注意:上述语句来自Oracle cursors文档,但也适用于其他文档 我不确定您是如何声明变量d的默认值以与光标处理程序一起使用的。但是,我坚信问题是因为没有正确处理d(未找到)值 如果我是你,我会像下面这样编码: DECLARE candidate CURSOR FOR SELECT `ce_agr_perc`, `ce_year_of_passing`, `ql_id

根据

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

注意:上述语句来自Oracle cursors文档,但也适用于其他文档

我不确定您是如何声明变量
d
的默认值以与
光标处理程序一起使用的。但是,我坚信问题是因为没有正确处理
d
未找到
)值

如果我是你,我会像下面这样编码:

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; 

在这种情况下,我要做的第一件事是确保所有代码都正确缩进。您可能有一个简单的错误,但是您的缩进使得很难确定。@user2071660:变量
d
的默认值是多少?那是
1
还是
0
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;
...