SQL 语法错误,MariaDB 服务器版本用于在 'CREATE PROCEDURE pro() 附近使用正确的语法

error in your SQL syntax, MariaDB server version for the right syntax to use near 'CREATE PROCEDURE pro()

DELIMITER $$
use adventureworks
CREATE PROCEDURE pro()
BEGIN
    DECLARE i int DEFAULT 0;
    
    WHILE i <= 50 DO
        INSERT INTO salesorderheader(SalesOrderID, RevisionNumber, OrderDate)
        VALUES (i, 1, "2001-07-01 00:00:00");
        SET i = i + 1;
    END WHILE;
END $$
call pro()
DELIMITER ;

每个语句后都需要一个终止符。 usecall 语句没有。

您正在切换脚本开头的定界符,因此语法为:

delimiter $$

use adventureworks$$

create procedure pro()
begin 
    ...
end$$

call pro()$$

delimiter ;

一种更典型的方法是仅更改过程定义的定界符:

use adventureworks;

delimiter $$
create procedure pro()
begin 
    ...
end$$
delimiter ;

call pro();

旁注:如果您是 运行 MariaDB 10.3 或更高版本,则可以使用递归查询而不是循环:

insert into salesorderheader(SalesOrderID, RevisionNumber, OrderDate)
with cte as (
    select 1 as i 
    union all select i + 1 from cte where i < 50
)
select i, 1, '2001-07-01'
from cte