Синтаксическая ошибка MySQL при создании триггера UPDATE - PullRequest
1 голос
/ 09 марта 2019

Я пытаюсь создать триггер для обновления поля зарплаты в этой таблице. клиентов (ID, имя, возраст, адрес, зарплата) с этого сайта Триггер SQL При его создании отображается следующая ошибка

MySQL сообщает:
# 1064 - у вас ошибка в синтаксисе SQL;обратитесь к руководству, соответствующему вашей версии сервера MariaDB, чтобы узнать правильный синтаксис для использования рядом с «ИЛИ ВСТАВИТЬ ИЛИ ОБНОВИТЬ ПОЛЬЗОВАТЕЛЕЙ ДЛЯ КАЖДОГО РЯДА, КОГДА (NEW.ID> 0) ОБЪЯВЛЯЕТСЯ» в строке 2

Здесьэто фрагмент кода:

BEFORE DELETE OR INSERT OR UPDATE ON customers 
FOR EACH ROW 
WHEN (NEW.ID > 0) 
DECLARE 
   sal_diff number; 
BEGIN `enter code here`
   sal_diff := :NEW.salary  - :OLD.salary; 
   dbms_output.put_line('Old salary: ' || :OLD.salary); 
   dbms_output.put_line('New salary: ' || :NEW.salary); 
   dbms_output.put_line('Salary difference: ' || sal_diff); 
END

Обратите внимание, что я использую phpMyAdmin.Работает ли там dbms_ouput.put_line ()?

1 Ответ

0 голосов
/ 09 марта 2019

Как сказано в комментариях, вы используете синтаксис Oracle, он не может работать на MySQL.

Тогда нет никакой причины использовать этот триггер для DELETE и INSERT, потому что ваша цель - вычислить разницу в зарплате в определенной строке до и после ее обновления. Вы не можете иметь значение NEW для DELETE, и вы не можете иметь значение OLD для INSERT. Таким образом, ваши вычисления имеют значение только при обновлении.

Вот правильный синтаксис MySQL (я предполагаю, что в вашей таблице есть столбец sal_diff)

DELIMITER $$
CREATE TRIGGER `update_sal_diff`
BEFORE UPDATE ON `customers `
FOR EACH ROW
BEGIN
    SET NEW.sal_diff = NEW.salary  - OLD.salary;
END $$
DELIMITER ;

Если это не то, чего вы пытаетесь достичь, отредактируйте свой вопрос и добавьте четкие требования

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