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 ;
每个语句后面都需要一个终止符。use
和call
语句没有一个。
您正在切换脚本开头的分隔符,因此语法为:
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