MySQL Несколько Курсоров в Процедуре - PullRequest
0 голосов
/ 13 декабря 2018

У меня были проблемы с моим кодом при попытке понять, как работают процедуры и курсоры в MySQL.Я хотел бы сделать так, чтобы курсоры использовали и / или обновляли переменные, объявленные в коде, но единственные правильно обновленные переменные - это var1 и var2.Cursor2 должен возвращать только 1 результат, но вместо этого он возвращает только пустые строки, var3 и var4 не обновляются - их значения, по-видимому, все еще являются значениями по умолчанию.То же самое для Cursor3 и переменной var4.

Реальный код похож на это:

DELIMITER //

CREATE PROCEDURE nameProcedure()

proc_label:BEGIN
DECLARE finished INTEGER DEFAULT 0;
DECLARE var1 VARCHAR(20) DEFAULT "";
DECLARE var2 VARCHAR(30) DEFAULT "";
DECLARE var3 INT(3) DEFAULT 0;
DECLARE var4 int(3) DEFAULT 0;

 // first cursor, gives multiple rows as results 
DECLARE cursor1 CURSOR FOR
SELECT column1, column2
FROM table1;

 // second cursor, should give only 1 row as result 
DECLARE cursor2 CURSOR FOR
SELECT column1, column2 
FROM table2
WHERE column1=var1 
AND column2=var2;

 // third cursor, should give only 1 row as result 
DECLARE cursor3 CURSOR FOR 
SELECT count(column3) 
FROM table3 
WHERE column1=var3;

 // HANDLER 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;

OPEN cursor1;
OPEN cursor2;
OPEN cursor3;

label: LOOP 

    FETCH cursor1 INTO var1, var2;

    IF finished=1 THEN LEAVE loop;
    END IF;

    FETCH cursor2 INTO var3, var4;

    IF finished=1 THEN LEAVE proc_label;
    END IF;

    FETCH cursor3 INTO var5;

    IF finished=1 THEN LEAVE proc_label;
    END IF;

    /* UPDATE some rows in tables using the values from var1, var2, var3, var4, var5 in WHERE clauses */

END LOOP loop;

CLOSE cursor1;

CLOSE cursor2;

CLOSE cursor3;

END//

Я прошу прощения за написание в этом посте, английский не является моим родным языком, и я никогда не писал пост на форумах, поэтому я не уверен в том, как его отформатировать, чтобы сделать вопрос более понятным для людей.Предложения, исправления и пр. Приветствуются.

...