В чем заключается ошибка, и это очень просто, ошибка отображается в последнем операторе «конец». В чем ошибка - PullRequest
0 голосов
/ 12 февраля 2020

В этом коде есть ошибка. Как я могу это выяснить?

CREATE DEFINER=`root`@`localhost` TRIGGER `check` BEFORE INSERT ON `whatstore` FOR EACH ROW
 BEGIN
    declare last_insert_time datetime;
    declare new_insert_time datetime;
    set @last_insert_time=(select insert_time from whatstore order by id desc limit 1);
    select datediff(new.insert_time,@last_inserted_time) into new_insert_time;
    case 
        when last_insert_time-new.insert_time>1 then insert into `delete`.table3(time_diff)  values(new_inserted_time);
    end
END

1 Ответ

1 голос
/ 12 февраля 2020

Ваш код имеет выражение CASE , а не выражение CASE.

Я бы посоветовал вам просто использовать IF, но вы можете настроить свой код с помощью END CASE:

 begin
    declare last_insert_time datetime;
    declare new_insert_time datetime;

    set @last_insert_time = (select insert_time from whatstore order by id desc limit 1);

    select datediff(new.insert_time, @last_inserted_time) into new_insert_time;

    case when last_insert_time - new.insert_time > 1 
         then insert into `delete`.table3 (time_diff)  
                  values (new_inserted_time);
    end case;
end;

Кажется, проще написать это без условной логики c:

insert into `delete`.table3 (time_diff)  
    select w.last_insert_time
    from (select insert_time
          from whatstore 
          order by id desc
          limit 1
         ) w
    where w.last_insert_time > new.insert_time;
...