WHILE - недопустимый ввод в этой позиции при запуске SQL в MySQL Workbench - PullRequest
0 голосов
/ 23 сентября 2019

Я создал таблицу следующим образом:

create table data_table(skey int, svalue int);

Я хочу найти пробелы в skey.Скажем, у меня есть записи 1,2,6,7.Затем выполнение SQL должно вернуть 4 и 5. Я сослался на this и попытался выполнить следующее:

select @min_val := min(svalue), @max_val := max(svalue) from data_table;

create table tmp (Field_No int);

WHILE @min <= @max DO
   if not exists (select * from data_table where skey = @min)
      insert into tmp (Field_No) values (@min)
   set @min = @min + 1
END WHILE;

select * from tmp
drop table tmp

Рабочая среда MySQL говорит WHILE is not valid input at this position:

enter image description here

PS: я использую MySQL 5.6.25

Обновление

Добавление всего кода в хранимой процедуре по-прежнему дает мне ошибки:

enter image description here

1 Ответ

0 голосов
/ 23 сентября 2019

Каждый if должен иметь тогда и и и конец, если;Если в процедуре содержится более 1 оператора, вы должны установить разделители. https://dev.mysql.com/doc/refman/8.0/en/stored-programs-defining.html

Этот синтаксис

drop procedure if exists p;
delimiter $$
create procedure p()
begin 
    select @min_val := min(svalue), @max_val := max(svalue) from data_table;

    create table tmp (Field_No int);

    WHILE @min <= @max DO
    if not exists (select * from data_table where skey = @min) then
        insert into tmp (Field_No) values (@min);
        set @min = @min + 1;
    end if;
    END WHILE;

    select * from tmp;
    drop table tmp;
end $$
delimiter ;

Но ваша логика отключена, вы, кажется, путаете @min_val и @ min

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...