Триггер базы данных Mysql

#mysql #database-trigger

#mysql #база данных-триггер

Вопрос:

Я все еще новичок в триггере базы данных msyql. Я хотел бы спросить о моих строках:

 CREATE TRIGGER secure_dml3
BEFORE DELETE ON t_pembelian
BEGIN
 IF (SELECT TO_CHAR (SYSDATE,'DY') IN ('SUN')) OR
 (SELECT TO_CHAR (SYSDATE, 'HH24:MI') NOT BETWEEN '09.45' AND '20.30')
    THEN
    IF DELETING THEN
    CALL RAISE_APPLICATION_ERROR (-20502,'Perubahan pada data hanya dapat dilakukan hanya pada jam kerja.');
 END IF; 
 END IF; 
END 
  

Mysql всегда говорит, что есть ошибка около

‘НАЧАТЬ, ЕСЛИ (ВЫБЕРИТЕ TO_CHAR (SYSDATE,’DY’) В (‘SUN’)) ИЛИ (ВЫБЕРИТЕ TO_CHAR (SYSD’ в строке 3.

Мне действительно нужна ваша помощь. Спасибо

Комментарии:

1. Во-первых, вам не хватает разделителя. Итак, добавьте следующее в начале, delimiter // и последнее END должно быть как END // Next в mysql нет функции TO_CHAR , и похоже, что вы скопировали какой-то триггер oracle. И в mysql RAISE_APPLICATION_ERROR недоступен, и его вызывается SIGNAL

2. Большое вам спасибо за ваш ответ. Я хотел бы спросить еще раз, to_char следует заменить на какой синтаксис? И мне нужно только изменить raise_application_error с помощью signal?

3. Проверьте документы mysql для date_format и SIGNAL для получения ошибки из триггера.

Ответ №1:

Я думаю, вы путаете oracle с MySQL. В MySQL не существует TO_CHAR вы можете использовать DATE_FORMAT(SYSDATE,'DY')