2015-01-13 3 views
0
USE `doc1vault`; 
DROP procedure IF EXISTS `EIN_ACCESS1`; 

DELIMITER $$ 
USE `doc1vault`$$ 
CREATE PROCEDURE `EIN_ACCESS1`(/*IN my_EIN VARCHAR(350),*/ IN my_ICODesc VARCHAR(200)) 
    BEGIN 
    DECLARE finished INTEGER DEFAULT 0; 
    DECLARE EINLIST varchar(200) DEFAULT 0; 
    DECLARE cur1 CURSOR FOR SELECT * FROM vault_databases where ico_description like CONCAT('%' , my_ICODesc , '%'); 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1; 
     get_rec:LOOP 
     FETCH cur1 INTO EINLIST; 
      IF finished = 1; 
     SELECT 'Record Finished'; /*Gives error hewe*/ 
     LEAVE get_rec; 
     END IF; 
     END LOOP get_rec; 
     END$$ 
DELIMITER ; 

결과에 MySQL의에 메시지를 표시하는 란은 DBMS_OUTPUT.PUT_LINE MySQL은 동등하거나 방법

1328 (HY000) 오류 : 잘못된 수의 변수를 FETCH

+0

커서에 문제가 있습니다. 'FETCH'는 커서에'SELECT *'를 사용하기 때문에 변수의 수를 결정할 수 없습니다. – wchiquito

답변

0

예 솔루션

USE `doc1vault`; 
DROP procedure IF EXISTS `EIN_ACCESS1`; 

DELIMITER $$ 
USE `doc1vault`$$ 
CREATE PROCEDURE `EIN_ACCESS1`(/*IN my_EIN VARCHAR(350),*/ IN my_ICODesc VARCHAR(200)) 
BEGIN 
    DECLARE finished INTEGER DEFAULT 0; 
    DECLARE EINLIST varchar(400) DEFAULT 0; 
    DECLARE cur1 CURSOR FOR SELECT ico_index FROM vault_databases where 
    ico_description  like CONCAT('%' , my_ICODesc , '%'); 

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1; 

    OPEN cur1; 
    get_rec:LOOP 

     FETCH cur1 INTO EINLIST; 

     IF finished = 1 then 
      SELECT 'Record Finished'; 
      LEAVE get_rec; 
     END IF; 
    END LOOP get_rec; 

END$$ 
DELIMITER ;