2016-11-17 48 views
0

爲什麼我的兩個變量輸出爲NULLSELECT部分光標正常工作。在光標MySQL cursor fetch NULL

CREATE PROCEDURE p2() 
    BEGIN 
    # Account table 
    DECLARE accountid INT; 
    DECLARE accountname VARCHAR(1000); 

    # 1. cursor finished/done variable comes first 
    DECLARE done INT DEFAULT 0; 
    # 2. the curser declaration and select 
    DECLARE c_account_id_name CURSOR FOR SELECT 
              accountid, 
              accountname 
             FROM temp.test; 
    # 3. the continue handler is defined last 
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = TRUE; 

    OPEN c_account_id_name; 
    SET accountid = 0; 
    SET accountname = ''; 

    read_loop: LOOP 
     FETCH c_account_id_name 
     INTO accountid, accountname; 
     IF done 
     THEN 
     LEAVE read_loop; 
     END IF; 
     SELECT accountname; 
    END LOOP; 
    END; 

enter image description here

回答

2

變量,然後選擇屬性不能是相同的...這是一個MySQL的錯誤。 這將工作

DROP PROCEDURE IF EXISTS p2; 
DELIMITER $$ 
CREATE PROCEDURE p2() 
    BEGIN 
    # Account table 
    DECLARE v_accountidsome INT; #pay attention 
    DECLARE v_accountnameelst VARCHAR(1000); #pay attention 

    # 1. cursor finished/done variable comes first 
    DECLARE v_done INT DEFAULT FALSE; 
    # 2. the cursor declaration and select 
    DECLARE c_account_id_name CURSOR FOR SELECT 
              accountid, #pay attention 
              accountname #pay attention 
             FROM temp.test; 
    # 3. the continue handler is defined last 
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET v_done = TRUE; 

    OPEN c_account_id_name; 

    read_loop: LOOP 
     FETCH c_account_id_name 
     INTO v_accountidsome, v_accountnameelst; 
     IF v_done 
     THEN 
     LEAVE read_loop; 
     END IF; 
     SELECT v_accountidsome; 
     SELECT v_accountnameelst; 
    END LOOP; 
    CLOSE c_account_id_name; 
    END $$ 
DELIMITER ; 

CALL p2(); 

尋找更多here

+0

很棒很棒的救生@ D.R。 !謝謝。 –