Как исправить триггер MySQL с помощью оператора if else? - PullRequest
0 голосов
/ 18 января 2019

У меня есть таблица up_files и fgusers3. триггер должен обновлять fgusers3 после вставки в up_files.

up_file: id, uname, days, d_leave
fgusers3: идентификатор, имя, AnualLeave, cf

У меня есть попытка без оператора if и все работает нормально. каждый раз, когда пользователь вставляет данные, триггер обновляет строку AnualLeave и строку cf в таблице fgusers3.

DROP TRIGGER IF EXISTS `after_insert`;
CREATE DEFINER=`root`@`localhost` 
TRIGGER `after_EL` BEFORE INSERT ON `up_files` 
FOR EACH ROW 
UPDATE fgusers3 
SET fgusers3.AnualLeave = fgusers3.AnualLeave - NEW.days + fgusers3.cf,fgusers3.cf = 0 
WHERE fgusers3.name = NEW.uname AND NEW.d_leave = 'Emergency Leave'

после того, как я добавлю оператор if else, у меня появится и ошибка. Помогите, пожалуйста, новичок в триггере mysql:

DELIMITER #
CREATE TRIGGER `after_insert` BEFORE INSERT ON `up_files` FOR EACH ROW 
BEGIN

UPDATE fgusers3 
IF(fgusers3.cf < NEW.days ) THEN
         SET fgusers3.AnualLeave = fgusers3.AnualLeave - NEW.days +fgusers3.cf,fgusers3.cf = 0
       WHERE fgusers3.name = NEW.uname AND NEW.d_leave = 'Emergency Leave' ;

       ELSE
       SET fgusers3.cf = fgusers3.cf - NEW.days
       WHERE fgusers3.name = NEW.uname AND NEW.d_leave = 'Emergency Leave' ;
       END IF ;
END#
DELIMITER ; 

Объяснение
Я пытаюсь сделать, если пользователь вставит «Аварийный отпуск», дни вычтут Ежегодный отпуск или перенесут (cf) с прошлого года, если доступно. если cf available достаточно, чем день, то он будет вычтен из cf, иначе это будет вычтено из ежегодного отпуска

1 Ответ

0 голосов
/ 18 января 2019

Я думаю, это больше похоже на то, что вы хотите.

DELIMITER $$ 
CREATE TRIGGER test_trig BEFORE INSERT ON up_files 
FOR EACH ROW 
bEGIN   
    IF(fgusers3.cf < NEW.days ) THEN
    UPDATE fgusers3 
        SET fgusers3.AnualLeave = fgusers3.AnualLeave - NEW.days +fgusers3.cf,fgusers3.cf = 0 
        WHERE fgusers3.name = NEW.uname AND NEW.d_leave = 'Emergency Leave' ; 
    ELSE 
    UPDATE fgusers3
        SET fgusers3.cf = fgusers3.cf - NEW.days 
        WHERE fgusers3.name = NEW.uname AND NEW.d_leave = 'Emergency Leave' ; 
    END if;
end $$

delimiter ; 

Если нет, то примеры данных в виде текста в вопросе помогут.

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