创建 mysql 过程

Create mysql procedure

我正在尝试在 mysql 数据库中创建过程此过程会将帐户从 table 移动到另一个 这是我的程序,但语法错误

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

您应该将正常的定界符更改为其他值,然后创建并结束过程并重置定界符。

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 ;

有关更多见解,请参阅:Getting Started with MySQL Stored Procedures

存储过程结构是为支持多个可执行语句而设计的。
每个语句都需要一个终止符,默认情况下是分号。 ;

需要指示mysql引擎立即停止执行每个终止的语句,直到主体结构被编译处理。

我们需要一个 DELIMITER 语句来暂时抑制默认终止符。
您的代码没有使用这样的 DELIMITER

以下示例将有助于修复您的代码。

-- define the delimiter
delimiter //


--- place here your stored procedure

-- and lastly following line
//

-- reset the delimiter
delimiter ;

在这里阅读我对类似问题的回答: