Проблема mysql, "else" недопустима в этой позиции, ожидая: END - PullRequest
0 голосов
/ 26 февраля 2019

Я использую MySQL, но пока я новичок, мне нужна помощь, чтобы понять и решить эту проблему

delimiter ./
create procedure getMesuresBetweenDates (in debut timestamp , in fin timestamp , in nomWaspmote varchar(16) , in nomSensor varchar(16) , out resultat int)
begin
declare compte int;
set compte = NULL;
If debut>=fin then set resultat = -2; end if;
else If Not Exists sensorParser then set resultat = -1 ; end if;
else select @compte=count(*) value, timestamp from sensorParser where id_wasp = nomWaspmote and sensor = nomSensor and timestamp >= debut and timestamp <= fin;
if @compte=0 then set resultat = 0; end if;
else set resultat = @compte;
end ./

Это первое, что не работает, когда я пролетал над ним, он говорит, что «else» недопустимо в этой позиции, ожидая: END

Я француз, поэтому я надеюсь, что мой английский не так уж плох

Вот новый код, благодаряБарт:

delimiter ./
create procedure getMesuresBetweenDates (in debut timestamp , in fin timestamp , in nomWaspmote varchar(16) , in nomSensor varchar(16) , out resultat int)
begin
declare compte int;
set compte = NULL;
If debut>=fin then 
    set resultat = -2;
else If Not Exists (select * from sensorParser) then 
    set resultat = -1 ;
else select @compte=count(*) value, timestamp from sensorParser where id_wasp = nomWaspmote and sensor = nomSensor and timestamp >= debut and timestamp <= fin;
if @compte=0 then
    set resultat = 0;
else set resultat = @compte;
end if;
end ./

это сработало, но теперь у меня есть другая проблема с end: он говорит мне, что утверждение неполное, он ожидает IF, но я не знаю, где

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019
delimiter ./
create procedure getMesuresBetweenDates (in debut timestamp , in fin timestamp , in nomWaspmote varchar(16) , in nomSensor varchar(16) , out resultat int)
begin
declare compte int;
set compte = NULL;
If debut>=fin then 
    set resultat = -2; 
else If Not Exists sensorParser then 
    set resultat = -1 ; 
else 
     select @compte=count(*) value, timestamp from sensorParser where id_wasp = nomWaspmote and sensor = nomSensor and timestamp >= debut and timestamp <= fin;
end if;
if @compte=0 then 
   set resultat = 0; 
else set resultat = @compte;
end if;
end ./

конец, если;слишком много и установлено в неправильных местах

0 голосов
/ 26 февраля 2019

Вы не должны заканчивать все if блоки end if, только после else:

If debut>=fin then 
     set resultat = -2; 
     -- don't put "end if" here
else 
     -- do something else
end if;

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

Если вы хотите сделать больше else с за один if, вы должны использовать elseif:

If debut>=fin then 
     set resultat = -2; 
     -- don't put "end if" here
elseif fin>=debut then
     -- do something else
else
     -- do yet something else
end if;

Если вы делаетеэто так, как вы написали, вы должны закрыть все if с end if:

if debut >= fin then
    -- do something
else if fin >= debut then        -- you start a new "if" here!
                                 -- notice the space between else and if
    -- do the else
     end if                      -- end the second if
end if                           -- end the first if

См. документацию для получения дополнительной информации.

...