【问题标题】:error in your SQL syntax, MariaDB server version for the right syntax to use near 'CREATE PROCEDURE pro()您的 SQL 语法错误,MariaDB 服务器版本在 'CREATE PROCEDURE pro() 附近使用正确的语法
【发布时间】:2020-12-13 07:56:12
【问题描述】:
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 ;

【问题讨论】:

  • 为我工作,使用最新的 MariaDB 10.5。你用的是什么版本?

标签: sql stored-procedures mariadb sql-insert recursive-query


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-08-26
    • 2017-10-25
    • 2022-11-12
    • 2017-02-14
    • 1970-01-01
    • 2017-12-10
    • 2017-09-30
    • 2018-01-20
    • 2018-07-13
    相关资源
    最近更新 更多