Извините за смутное название, вот моя проблема. У меня есть хранимые процедуры для DB2, которые я пытаюсь преобразовать для MySQL. Я хотел бы знать, могу ли я написать инструкцию SELECT в объявлении курсора как строковую переменную. Например, с DB2 у меня есть это:
(...)
-- Declare cursors
DECLARE c_very_init CURSOR WITH RETURN FOR s_very_init;
DECLARE c_date CURSOR WITH RETURN FOR s_date;
DECLARE CONTINUE HANDLER FOR not_found
SET at_end = 1;
-- In case the_date is 0, retrieve the first date
IF the_date = 0 THEN
SET sql_end_date = '
SELECT DATE
FROM ACCOUNTS
WHERE REF = ''' || the_ref || '''
ORDER BY ID ASC FETCH FIRST 1 ROWS ONLY';
PREPARE s_date FROM sql_end_date;
OPEN c_date;
FETCH FROM c_date INTO data_ins;
SET the_last_date = data_ins;
CLOSE c_date;
ELSE
SET the_last_date = the_date;
END IF;
-- Get the 'very' initial value
SET sql_very_init = '
SELECT in, out
FROM MOVEMENTS
WHERE REF = ''' || the_ref || '''
AND DATE < ' || the_last_date;
PREPARE s_very_init FROM sql_very_init;
OPEN c_very_init;
FETCH FROM c_very_init INTO dare, avere;
-- Loop through the results
(...)
Я объявляю курсор c_very_init
, но во время объявления курсора в SP я все еще не знаю полный оператор выбора, потому что мне нужно получить (при необходимости) значение the_last_date
. Кажется, я не могу сделать это:
DECLARE c_very_init CURSOR WITH RETURN FOR s_very_init;
с MySQL, синтаксис с оператором прямо в объявлении:
DECLARE c_very_init CURSOR FOR SELECT blaablaa...;
Я не прав?
Спасибо.
Фабьен.