Создать процедуру mysql

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

CREATE PROCEDURE radius.archive_acct()
BEGIN
 INSERT INTO radacctold
 SELECT * FROM radacct
 WHERE acctstoptime > 0
 AND date(acctstarttime) < (CURDATE() - INTERVAL 3 MONTH);
 DELETE FROM radacct
WHERE acctstoptime > 0
AND date(acctstarttime) < (CURDATE() - INTERVAL 3 MONTH);
END

это ошибка

#1064 - 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 6

person Muhammad Khaled    schedule 29.12.2017    source источник
comment
Вы уверены, что поля в обеих таблицах одинаковы?   -  person codeLover    schedule 29.12.2017


Ответы (2)


Вы должны изменить обычный разделитель на другое значение, а затем создать и завершить процедуру и сбросить разделитель.

DELIMITER //
CREATE PROCEDURE radius.archive_acct()
BEGIN
 INSERT INTO radacctold
 SELECT * FROM radacct
 WHERE acctstoptime > 0 AND date(acctstarttime) < (CURDATE() - INTERVAL 3 MONTH);
 DELETE FROM radacct
 WHERE acctstoptime > 0
 AND date(acctstarttime) < (CURDATE() - INTERVAL 3 MONTH);
END //
DELIMITER ;

Для получения дополнительной информации см.: Начало работы с хранимыми процедурами MySQL

person cdaiga    schedule 29.12.2017

Структуры хранимых процедур предназначены для поддержки нескольких исполняемых операторов.
И каждому оператору нужен разделитель, который по умолчанию является точкой с запятой. ;.

Необходимо дать указание движку mysql немедленно прекратить выполнение каждого завершенного оператора, пока структура тела не будет обработана и скомпилирована.

Нам нужен оператор DELIMITER для временного подавления терминатора по умолчанию.
В вашем коде не используется такой DELIMITER.

Следующий пример поможет исправить ваш код.

-- define the delimiter
delimiter //


--- place here your stored procedure

-- and lastly following line
//

-- reset the delimiter
delimiter ;

Прочитайте мой ответ на аналогичный вопрос здесь: https://stackoverflow.com/a/23160180/767881

person Ravinder Reddy    schedule 29.12.2017