Я хотел бы создать событие с помощью курсора. Но получение ошибки ниже
Ошибка:
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
Код:
create event api_5 ON SCHEDULE EVERY 360 SECOND DO
BEGIN
DECLARE lc_current_time DATETIME;
DECLARE unuse_count INT;
DECLARE auto_assign TINYINT;
DECLARE total_sum INT;
DECLARE check_count INT;
SET lc_current_time = CONVERT_TZ(NOW(), @@session.time_zone, '+0:00');
DECLARE select_cursor CURSOR FOR SELECT unuse_count,auto_assign,total_sum,check_count from new_api;
OPEN select_cursor;
LOOP
FETCH select_cursor INTO unuse_count,auto_assign,total_sum,check_count
if(unuse_count <= check_count){
insert into api_report(date,new_api_id,api_name,type,status,email,customer_id,unuse_count,check_count) values (lc_current_time,5,'abc',4,1,'[email protected]',check_count,unuse_count);
}
END;
END LOOP;
CLOSE select_cursor;
END;
Любой хотел бы предложить, почему он показывает на третьей строке. Существуют ограничения, которые мы не можем изменять несколько раз. Я пытаюсь в первый раз. Поэтому, пожалуйста, игнорируйте любые ошибки.
Примечание. Вставить запрос и выбрать запрос, оба работают нормально.
Вторая ошибка:
ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE select_cursor CURSOR FOR SELECT unuse_count,auto_assign,total_sum,check_' at line 10
Вот ответ:
Исправления:
Разделитель не добавляется. который дает первую ошибку, поэтому добавили разделитель в начале и в конце.
Без полного объявления все объявления переменной начали использовать его. В ответ я поставлю SET lc_current_time = CONVERT_TZ(NOW(), @@session.time_zone, '+0:00');
после курсора.
If condition
не добавлено в соответствии с синтаксисом mysql
Рабочее решение:
delimiter $$
create event api_6 ON SCHEDULE EVERY 360 SECOND DO
BEGIN
DECLARE lc_current_time DATETIME;
DECLARE unuse_count INT;
DECLARE auto_assign TINYINT;
DECLARE total_sum INT;
DECLARE check_count INT;
DECLARE select_cursor CURSOR FOR SELECT unuse_count,auto_assign,total_sum,check_count from new_api;
SET lc_current_time = CONVERT_TZ(NOW(), @@session.time_zone, '+0:00');
OPEN select_cursor;
LOOP
FETCH select_cursor INTO unuse_count,auto_assign,total_sum,check_count;
IF unuse_count <= check_count THEN
insert into api_report(date,new_api_id,api_name,type,status,email,customer_id,unuse_count,check_count) values (lc_current_time,5,'abc',4,1,'[email protected]',check_count,unuse_count);
END IF;
END LOOP;
CLOSE select_cursor;
END$$
delimiter ;
Если вы не использовали разделитель, попробуйте Это может помочь вам:
delimiter $$
create event api_5 ON SCHEDULE EVERY 360 SECOND DO
BEGIN
DECLARE lc_current_time DATETIME;
DECLARE unuse_count INT;
DECLARE auto_assign TINYINT;
DECLARE total_sum INT;
DECLARE check_count INT;
SET lc_current_time = CONVERT_TZ(NOW(), @@session.time_zone, '+0:00');
DECLARE select_cursor CURSOR FOR SELECT unuse_count,auto_assign,total_sum,check_count from new_api;
OPEN select_cursor;
LOOP
FETCH select_cursor INTO unuse_count,auto_assign,total_sum,check_count
if(unuse_count <= check_count){
insert into api_report(date,new_api_id,api_name,type,status,email,customer_id,unuse_count,check_count) values (lc_current_time,5,'abc',4,1,'[email protected]',check_count,unuse_count);
}
END;
END LOOP;
CLOSE select_cursor;
END
delimiter ;
delimiter
?