2017-01-30 2 views
0

Как вернуть число обновленных строк из дочерней хранимой процедуры в родительский в MySQL? Резервная хранимая процедура вызывается из родителя с помощью курсора.Как вернуть число обновленных строк из дочерней хранимой процедуры в родительский в MySQL?

Пример:

хранимых процедур 1 (родитель):

DECLARE done INT DEFAULT FALSE; 
DECLARE _a, _b, _c, VARCHAR(50); 
DECLARE Mogambo_Cursor CURSOR FOR 
    SELECT a, b, c, FROM tblMogambo; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 

OPEN Mogambo_Cursor;  
read_loop: LOOP 
    FETCH Mogambo_Cursor INTO _a, _b, _c; 
    IF done THEN 
     LEAVE read_loop; 
    ELSE 
     CALL storedProcedure2 (_a, _b, _c); 
    END IF; 
END LOOP; 
CLOSE AdditionalConstraint_Cursor; 

хранимых процедур 2 (ребенок):

INSERT IGNORE INTO tblLuke (a, b, c) .... 

хранимых процедур 2 не всегда вставить строку. Как узнать, сколько строк было обновлено в конце выполнения хранимой процедуры 1?

Я пробовал с @@ ROW_COUNT и использовал переменную, но не смог получить ожидаемый результат. Есть ли способ получить обновленные строки?

ответ

2
DECLARE done INT DEFAULT FALSE; 
DECLARE _a, _b, _c, VARCHAR(50); 
DECLARE total_count NUMBER DEFAULT 0; <- declare new var total_count 
DECLARE Mogambo_Cursor CURSOR FOR 
    SELECT a, b, c, FROM tblMogambo; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; 

OPEN Mogambo_Cursor;  
read_loop: LOOP 
    FETCH Mogambo_Cursor INTO _a, _b, _c; 
    IF done THEN 
     LEAVE read_loop; 
    ELSE 
     CALL storedProcedure2 (_a, _b, _c,_outParameter); 
     total_count :=total_count+_outParameter 
    END IF; 
    SELECT total_count FROM DUAL; 
END LOOP; 
CLOSE AdditionalConstraint_Cursor; 

Как показано в приведенном выше коде вы можете объявить один из параметров для процедуры ребенка и получить значение, которое outparameter в можно вычислить общую строку, вставленный с помощью данной процедуры1. Вы должны объявить еще одну переменную, чтобы получить окончательное общее обновленное значение строк как total_count, указанное в приведенном выше коде. И это значение вы можете получить в любой форме, например, вне переменной или просто распечатать, используя select из dual. Надеюсь, это поможет.

+0

Я сделал следующее, как было предложено, и я добавил строку в SP1 DECLARE _outParameter INT; И в SP2 я добавил следующее: OUT outParameter INT в списке параметров и, наконец, SET outParameter = ROW_COUNT(); По-прежнему получать выход -1. Я делаю что-то неправильно? – Sunil

+0

В дочерней процедуре после вставки или обновления просто поместите фиксацию, а затем попытайтесь получить значение 'ROW_COUNT()' в процедуре2. Если это возвращает правильный ответ, перейдите к процедуре1. –

Смежные вопросы