#sql #stored-procedures #mariadb #sql-insert #recursive-query
#sql #хранимые процедуры #mariadb #sql-вставка #рекурсивный запрос
Вопрос:
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 ;
Комментарии:
1. Работает для меня, используя последнюю версию MariaDB 10.5. Какую версию вы используете?
Ответ №1:
Вам нужен завершитель после каждого оператора. В use
call
операторе and его нет.
Вы переключаете разделитель в начале вашего скрипта, поэтому синтаксис будет:
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