MySQL ошибка при создании триггера с функцией извлечения

0

Когда я попытаюсь создать триггер, как показано ниже,

CREATE TRIGGER FiscalYearTable1_bi 
BEFORE INSERT  
ON FiscalYearTable1 
FOR EACH ROW  
     IF ( 
             ( EXTRACT (YEAR FROM FiscalYearTable1.start_date) !=  FiscalYearTable1.fiscal_year - 1) OR
            (EXTRACT (MONTH FROM FiscalYearTable1.start_date) != 04) OR
            (EXTRACT (DAY FROM FiscalYearTable1.start_date) != 01) 
       ) 
          SET FiscalYearTable1.fiscal_year = 1/0;

Я получаю следующую ошибку,

ОШИБКА 1064 (42000): у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с 'FROM FiscalYearTable1.start_date)!= FiscalYearTable1.fiscal_year - 1) ИЛИ (EXTRA' в строке 1

Я не могу понять, что такое ошибка. Есть идеи? Благодаря

Теги:
triggers

1 ответ

0
Лучший ответ

что-то вроде этого:

delimiter #

create trigger FiscalYearTable1_before_ins_trig before insert on FiscalYearTable1
for each row
begin

declare y smallint unsigned default 0;
declare m tinyint unsigned default 0;
declare d tinyint unsigned default 0;

  set y = year(new.start_date);
  set m = month(new.start_date);
  set d = day(new.start_date);

  -- whatever logic you require...
  if y != new.fiscal_year-1 or m != 4 or d != 1 then
    set new.fiscal_year = null; 
  end if;

end#

delimiter ;
  • 0
    хорошо .. это работает gr8 .. но мне интересно, что проблема с экстрактом? Есть идеи?
  • 0
    if..then..end if; возможно, синтаксическая ошибка - ваш оригинальный код немного сложен для чтения. если вы думаете, что мое решение работает для вас, вы могли бы принять ответ, пожалуйста, спасибо :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню