Хранимая процедура вылетает при нахождении первого значения в цикле
Написал хранимую процедуру на своем сервере MySql. Процедура работает без проблем, все хорошо.
В процедуре есть курсор и цикл.
Пишу/копирую процедуру на другой сервер, при первом нахождении нужной строки, с которой будет работать цикл , процедура завершается. После попыток отладки, нашел строчки, где все это происходит. Выделил в коде(написано ----- начало проблемы/конец проблемы------)
DELIMITER //
CREATE PROCEDURE curdemo()
BEGIN
DECLARE done INTEGER DEFAULT 0;
DECLARE curSapTNID1 INTEGER;
DECLARE resultpTN INTEGER;
DECLARE dayofyear INTEGER;
DECLARE yearcurr INTEGER;
DECLARE tDate1 VARCHAR(10);
DECLARE start_date1 DATE;
DECLARE end_date1 DATE;
DECLARE curDate DATE;
DECLARE curGrCode TEXT;
DECLARE trap INTEGER;
DECLARE cursor_tabel CURSOR FOR SELECT DISTINCT sapTN from personua;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
SET yearcurr = YEAR(CURDATE());
IF MOD(yearcurr,4) = 0 THEN
SET dayofyear = 366;
ELSE
SET dayofyear = 365;
END IF;
OPEN cursor_tabel;
WHILE done = 0 DO
FETCH cursor_tabel INTO curSapTNID1;
SET resultpTN = (SELECT COUNT(*) FROM work_current WHERE work_current.pTN = curSapTNID1);
IF resultpTN < dayofyear THEN
SELECT DISTINCT pTn FROM work_current WHERE pTn = curSapTNID1;
SET tDate1 = CONCAT(YEAR(CURDATE()),'-01-01');
SET start_date1 = (SELECT CAST(tDate1 AS DATE));
SET end_date1 = (SELECT DATE_ADD(start_date1, INTERVAL 1 YEAR));
SET curDate = (SELECT start_date1);
WHILE curDate < end_date1 DO
-------Начало проблемы---------------------------
SET curGrCode = (SELECT GrCode FROM work_current WHERE work_current.Date = curDate AND pTN = curSapTNID1 AND isAct = 1 LIMIT 1);
IF curGrCode IS NULL THEN
INSERT INTO work_current(Date,GrCode,isAct, pTN,DBEG,DEND) VALUES (curDate,'В',1,curSapTNID1,start_date1,end_date1);
END IF;
-----Конец проблемы--------------------------
SET curDate = (SELECT DATE_ADD(curDate, INTERVAL 1 DAY));
END WHILE;
END IF;
END WHILE;
CLOSE cursor_tabel;
END
// DELIMITER ;
Ответы (1 шт):
Автор решения: Евгений Южаков
→ Ссылка
Ошибка была в том что в строке находилась запись с текстом , в котором имелся штрих(') , который сразу прекращал процедуру. Жесть)