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 ;
每个语句后都需要一个终止符。 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
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